무작위 질문은 여기에 있습니다. 나는 이것에 대한 용어가 있는지 모르겠다. 그러나 명시 적 리시버없이 메소드를 정의 할 때 어떤 클래스가 메소드를 얻는지를 어떻게 알 수 있을까? 그게 무엇이든간에 self
이 무엇입니까?Ruby 명시 적 수신기가 없을 때 어떤 클래스가 메소드를 얻나요?
self
은 클래스 정의의 컨텍스트에서 정의되는 클래스이며 암시 적 수신기로 정의 된 메서드는 항상 클래스에 바인딩됩니다.
, 나는 'sub_method가'뿐만 아니라 외부 클래스에 넣어지고 있음을 인스턴스 메서드 내부의 방법을 정의하는 경우 : 최고 수준 범위에서 또한
[12] pry(main)> class A
[12] pry(main)* def my_method
[12] pry(main)* puts self
[12] pry(main)* def sub_method
[12] pry(main)* puts self
[12] pry(main)* end
[12] pry(main)* end
[12] pry(main)* end
=> :my_method
[13] pry(main)> a = A.new
=> #<A:0x007fa588181d40>
[14] pry(main)> a.my_method
#<A:0x007fa588181d40>
=> :sub_method
[15] pry(main)> a.sub_method
#<A:0x007fa588181d40>
=> nil
[16] pry(main)> A.instance_methods(false)
=> [:my_method, :sub_method]
, self
이 main
입니다입니다 Object
클래스의 인스턴스하지만 방법이없는 나는 내가 본 방법 다른 싱글 방법을 기반으로 예상 된 것입니다 main
의 단일 클래스로, Object
에가 추가됩니다 정의 된 작업 :
여기에 무슨 일이 벌어지고 있는지, 규칙이 있습니까? 아니면 알아야 할 몇 가지 사례가 있습니까?
그리고 당신이 그것을 찾기 시작하기 전에 : 그 블로그 포스트의 저자는 불행하게도, 세 번째 암시 적 컨텍스트에 대해 언급 한 적이 없다. –
그리고 그녀를 모르는 사람들을 위해 : Yugui는 Ruby 1.9의 릴리스 관리자였으며 Ruby 디자인, 개발, 유지 관리 및 릴리스 프로세스에서 많은 개선을 담당했습니다. 때로는 Ruby 1.8의 나쁜 옛날을 잊어 버립니다. –