これは、Kernel#__method__
Ruby-Doc.org による説明です(強調を追加)。
現在のメソッドの定義での名前をSymbol として返します。メソッドの外で呼び出された場合は、 を返します
nil
。
ここで、次のコード スニペットを検討してください。
DEFINITION = proc { __method__ }
class C
define_method :one, DEFINITION
define_method :two, DEFINITION
end
o = C.new
MRI v1.8.7+ を使用して以下を実行すると、期待どおりの結果が得られます。
o.one #=> :one
o.two #=> :two
ただし、JRuby 1.7+ を使用して同じコードを実行すると (以前のバージョンはテストしていません):
o.one #=> :two
o.two #=> :two
これは JRuby の実装の欠陥と見なすことができますか?それとも単に の解釈が異なるだけなのKernel#__method__
でしょうか?