현재 메서드의 이름을 Symbol
으로 반환하는 Kernel#__method__
을 사용할 수 있습니다. super
과 달리 이것은 키워드가 아니라 일반적인 방법이므로 메소드를 호출하기 위해 필수 인수와 함께 send
메소드에 전달해야합니다. 나는 그 같으면 모든 솔루션 생각할 수 없다 __method__
없이
class Foo
def self.define_fact(method_name)
define_method(method_name) do |n|
n > 0 ? n * send(__method__, n - 1) : 1
end
end
end
f = Foo.new
# puts f.fact(5)
# => undefined method `fact' for #<Foo:0x8ede45c> (NoMethodError)
Foo.define_fact :fact
puts f.fact(5)
# => 120
: 여기
obj = Object.new
def obj.foo
p __method__
end
obj.foo
# => :foo
그리고 동적으로 계승 방법을 정의하는 클래스 메소드의 예입니다 : 여기
은 무엇
__method__
반환하는 것은 가능하다면 피해야하는 것이 더 좋은
eval
과 관련됩니다.
감사합니다. KL-7, 귀하의 답변에서이 것에 대한 특별한 키워드가 없다고 가정합니다. – Alexey