Ruby를 배우기 시작했을 때, Michael Hartl의 뛰어난 Rails Tutorial으로 시작했습니다. 튜토리얼을 다시 살펴보고 예제 애플리케이션 코드의 일부분이 수정되었음을 알았습니다. 인증 장에서는 두 가지 방법으로 변경 하였다 :self 키워드를 추가하면 어떤 차이가 있습니까?
# SessionsHelper
def sign_in(user)
...
self.current_user = user
end
def sign_out
self.current_user = nil
...
end
이전 키워드 self
생략 하였다. 하지만 앱이 효과가있었습니다. 그래서, 그것이 파산하지 않으면, 왜 그것을 고칠 수 있습니까? 어떤 가치가 self
으로 추가되었으며 왜 사용됩니까?
나는 self
이 인스턴스 메소드가 아닌 클래스 메소드를 정의한다는 것을 알고 있습니다. 그리고 모델에서 self
을 사용하면 객체의 속성을 직접 참조 할 수 있습니다. 하지만 점들을 묶어 도우미에서 사용되는 방법을 볼 수는 없습니다. 나는 전에 컨트롤러에서 그것을 보았고 왜 우리가 그것을 사용하고 싶어하는지 이해할 수 없다.
이는'self' 키워드없이 일한다면, 그들은 인스턴스 변수를 사용하고 있어야합니다 (이 setter 메소드를 호출 B/C,하지만 자기없이, 그것은 지역 변수를 설정합니다). 이것들은 똑같은 것이 아니며, IMO, 인스턴스 변수보다 설정 메소드를 사용하는 것이 훨씬 낫다. (b/c 설정은 직접적으로 당신이 그것의 구현에 대한 지식을 가지고 있음을 의미하지만 setter를 호출하는 것은 하나의 메소드). –
@JoshuaCheek : 필연적으로,'attr_accessor : current_user' 또는 명시 적 메소드'def current_user = (new_user)'가있을 수 있으며 같은 구문이 유효합니다. – maerics
실제로 새로운 방법과 이전 버전이 있습니다 : def current_user = (user) @current_user = user end' – Mohamad