4
루비는 method_missing
이고 파이썬은 getattr
입니다. 부는 메소드 호출을 가로 채기 위해 사용할 수있는 것을 제공합니까?Boo에서 메소드 호출을 가로채는 방법은 무엇입니까?
루비는 method_missing
이고 파이썬은 getattr
입니다. 부는 메소드 호출을 가로 채기 위해 사용할 수있는 것을 제공합니까?Boo에서 메소드 호출을 가로채는 방법은 무엇입니까?
예, 부는 IQuackFu입니다.
QuackGet
: 당신이QuackSet
가 호출되는 속성 값을 얻을 때QuackInvoke
속성 값을 설정할 때 호출되는 : 호출되는 기본적으로, 당신은 세 가지 방법을 가지고있는, IQuackFu
를 구현 메서드를 호출 할 때
여기에 an example입니다.
작은 질문 : 다른 개체의 메서드 호출을 차단할 수 있습니까? Groovy와 같은 것은 메타 클래스와 같습니다. 정적으로 입력 되었기 때문에 대답은 '아니오'라고 생각하지만 확신하고 싶습니다. – Geo
Groovy와 같은 방식으로 할 수 있다고 생각지 않지만, IQuackFu 사용 가능 클래스를 사용하여 다른 클래스를 랩/장식 할 수 있습니다. IQuackFu가 가능한 클래스는 확장 동작을 구현하는 메서드 및 속성 사전을 가질 수 있습니다. –
Boo는 Groovy처럼 진정으로 동적은 아니며 런타임에 Type의 정의를 변경할 수 없습니다. 변수를 'duck'으로 선언하면 컴파일러가 마술을 통해 해당 객체에 대한 후기 바인딩으로 바뀌고, 가능한 경우 IQuackFu를 통해 전달됩니다. Boo에는 실제 메타 클래스가 없습니다. 메타 클래스와 비슷한 것을 얻기 위해서는 IronRuby 또는 IronPython이 필요합니다. –