2012-10-17 34 views

Trả lời

21

Đâ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 
+3

Synonym: '__method__' – steenslag

+1

Chỉ '__method__' sẽ làm việc trong 1,8,' __callee__' đi kèm với 1,9 – UncleGene

+1

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 ở. –

0

Rất đơn giản:

 

def foo 
    puts __method__ 
end 
 
7

__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 
Các vấn đề liên quan