로그'메타프로그램 루비 버전 2'3장 읽기
제3장 화요일: 방법
동적 방법
호출 방법은 대상에게 메시지를 보내는 것입니다
Object#send
obj.send(:my_method, 3)
Object#send를 사용하면 어떤 방법으로든 호출할 수 있습니다.
동적 분포
send
사용 방법, 호출할 방법명을 매개 변수로 결정하고 코드가 실행될 때 호출하는 방법동적 정의 방법
Module#define_method
class MyClass
define_method :my_method do |my_arg|
my_arg * 3
end
end
obj = MyClass.new
obj.my_method(2) #=> 6
1단계: 동적 디스크 추가
2단계: 동적 생성 방법
3단계: 코드에 주석 달기
method_missing
기본 분류의 privete 실례 방법
hoge.send :method_missing, :my_method
=> NoMethodError: undefined method 'my_method' for <...>
class Lawyer
def method_missing(method, *args)
puts "呼び出した: #{method}(#{args.join(',')})"
puts "(ブロックも渡した)" if block_given?
end
end
bob = Lawyer.new
bob.talk_simple('a', 'b') do
# ブロック
end
=> 呼び出した: talk_simple(a,b)
(ブロックも渡した)
유령 방법
동적 에이전트
respond_to_missing?
const_missing
여백 석판
총결산
가능하면 동적 방법을 사용하고 방법이 없으면 유령 방법을 사용한다.
감상
Object#send 동적 호출 메서드, Module#define 사용method를 사용하면 동적 정의 방법과 같은 동적 방법의 존재를 알 수 있다.
또한 BasicObject#method미스싱을 덮어쓰고 귀신 방법으로 존재하지 않는 방법을 만드는 방법을 알고 있습니다.
일단 보면 이런 느낌을 알아차릴 수 있다.실제로 직접 사용하려면 더욱 익숙하고 자신감 있는 피부감이 필요하다.
Reference
이 문제에 관하여(로그'메타프로그램 루비 버전 2'3장 읽기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/baramatsubonzo/items/6b087661d0be2dad2c78텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)