1

これは、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__でしょうか?

4

1 に答える 1