인스턴스 변수에 직접 액세스 vs. 접근 자 메서드 사용


답변:


100

self.attribute메서드를 호출합니다 attribute. 인수를 사용
self.attribute = value하여 메서드 attribute=를 호출합니다 value.
@attribute@attribute = value/ 얻을 인스턴스 변수의 값을 설정@attribute .

그래서 기본적으로 그들은 완전히 다른 두 가지입니다.

그러나 호출 attr_accessor :attribute하면 attribute반환 @attribute할 메서드 attribute=(value)와 설정할 메서드 를 정의합니다 @attribute = value. 따라서이 경우 차이가 없습니다.


14
현재 .NET 파일self.있더라도 일반적으로 사용하는 것이 좋습니다 (getter / setter 메서드를 작성하지 않는 한) . 이렇게하면 인스턴스 변수를 가져 오거나 설정하는 것 이상을 수행하도록 나중에 접근 자 메서드를 변경하는 경우 추가 리팩터링 작업 및 버그로부터 보호됩니다. (또는 다른 사람이 작업을 패치하거나 하위 클래스를 attr_accessor
만드는 경우

6
Phrogz가 말하는 버그 중 하나는 단순히 self.attribute = ______ 대신 attribute = _____를 호출하면 인스턴스 변수 대신 지역 변수를 설정하는 것입니다.
제이슨 노블

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.