2

(質問をより具体的にするために編集されました)

次の例のように、別のオブジェクトのコンテキストでシングルトン メソッドを実行できるかどうかを知りたいです。

class A
  def initialize
    @foo = 'foo'
  end
end

def A.singleton(*args)
  puts 'in singleton'
  puts @foo
end

A.new.instance_eval &A.method(:singleton)

# output is:
# - in singleton

# desired output:
# - in singleton
# - foo
4

2 に答える 2

0

これは不可能です。実際、Ruby には、そうしようとしたときに特定のエラーがあります。

module Foo
  def self.bar
  end
end

class Baz
end

Foo.method(:bar).unbind.bind(Baz.new)
# TypeError: singleton method called for a different object

これは本当に人為的な制限です。なぜならUnboundMethod#bind、型チェックを簡単にスキップして実行できるからです。しかし、別のレシーバーでシングルトン メソッドを呼び出すことができれば、根本的な矛盾になります。シングルトン メソッドは、単一のインスタンスに対して定義されます。これが許可されていないことは理にかなっています。

于 2015-02-19T20:32:27.377 に答える