Tôi đang cố gắng để có được một tên phương thức từ bản thân:Ruby - Làm thế nào tôi có thể nhận được tên phương thức trong chính nó?
def funky_method
self.inspect
end
Nó trả về "chính".
Làm cách nào để tôi có thể trả về "funky_method"?
Tôi đang cố gắng để có được một tên phương thức từ bản thân:Ruby - Làm thế nào tôi có thể nhận được tên phương thức trong chính nó?
def funky_method
self.inspect
end
Nó trả về "chính".
Làm cách nào để tôi có thể trả về "funky_method"?
Đây là mã:
Đối với phiên bản> = 1.9:
def funky_method
return __callee__
end
Đối với phiên bản < 1.9:
def funky_method
return __method__
end
Rất đơn giản:
def foo
puts __method__
end
__callee__
trả về "tên gọi" của phương thức hiện tại trong khi __method__
trả về "tên tại định nghĩa" của phương thức hiện tại.
Kết quả là __method__
không trả về kết quả mong đợi khi được sử dụng với 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
Synonym: '__method__' – steenslag
Chỉ '__method__' sẽ làm việc trong 1,8,' __callee__' đi kèm với 1,9 – UncleGene
Vì vậy, bạn đang nói rằng' __method__' không làm việc cho Ruby Version> = 1,9? Theo câu trả lời của Chetan Patil, họ tạo ra các giá trị khác nhau, người gọi so với tên phương thức bạn đang ở. –