Próbuję uzyskać nazwę metody od siebie:Ruby - Jak mogę uzyskać nazwę metody w sobie?
def funky_method
self.inspect
end
Zwraca „main”.
Jak mogę zwrócić "funky_method" zamiast tego?
Próbuję uzyskać nazwę metody od siebie:Ruby - Jak mogę uzyskać nazwę metody w sobie?
def funky_method
self.inspect
end
Zwraca „main”.
Jak mogę zwrócić "funky_method" zamiast tego?
Oto kod:
Dla wersji> = 1.9:
def funky_method
return __callee__
end
< Dla wersji 1.9:
def funky_method
return __method__
end
bardzo proste:
def foo
puts __method__
end
__callee__
zwraca "wywoływaną nazwę" bieżącej metody, podczas gdy __method__
zwraca "nazwę w definicji" bieżącej metody.
W rezultacie __method__
nie zwraca oczekiwanego wyniku, gdy jest używany z alias_method.
class Foo
def foo
puts "__method__: #{__method__.to_s} __callee__:#{__callee__.to_s} "
end
alias_method :baz, :foo
end
Foo.new.foo # __method__: foo __callee__:foo
Foo.new.baz # __method__: foo __callee__:baz
Synonim: '' __method__' – steenslag
Tylko __method__' będzie działać w 1.8, '__callee__' pochodzi z 1,9 – UncleGene
Więc mówisz, że' __method__' nie działa dla Ruby w wersji> = 1,9? Zgodnie z odpowiedzią Chetana Patila, wytwarzają one różne wartości, dzwoniący kontra nazwa metody, w której się znajdujesz. –