클래스 인스턴스 내에서 인스턴스 변수를 통해 변수 값을 읽어야한다는 것을 알고 있습니다. 그러나 자기를 통해 읽는 결과는 무엇입니까?자체를 사용하여 인스턴스 변수 읽기
아래의 예를 참조 :
당신의 예에서class Test attr_writer :aa
def testing
puts @aa
puts self.aa <-- what are the consequences if I apply attr_reader :aa and try to read 'aa' via self.aa ? can I read other value by accident?
end
def self.bb
a = self.new
a.aa = "111"
a.testing
end
end
Test.bb
'puts self.aa'는'puts aa'와 같습니다. 그것은'self'가 기본 수신기이기 때문입니다. 'testing'은 인스턴스 메소드이기 때문에'Test' 인스턴스에 의해 호출되므로'self'는 메소드 내 인스턴스와 같습니다. 메소드 내에'puts "self = # {self}"'를 추가하여이를 확인할 수 있습니다. 'puts aa' (또는'puts self.aa')의 효과는 당신이'aa '를위한 접근자를 생성했는지에 달려 있습니다 (예를 들어'attr_reader : aa'). 만약 당신이 가지고 있다면,'puts aa'는 접근자를 통해 @aa의 값을 제공 할 것입니다; 그렇지 않은 경우 지역 변수 또는 메소드 'aa'가 없다는 것을 알리는 예외가 발생합니다. –
좋아, 어떤 특별한 이유 : "그러나 @ varariable 대신에 메서드를 사용하는 것이 여러 가지 이유로 권장됩니다." ? –