2

procRubyのメソッドからtrueを取得する方法はありますか?

取得したUnboundMethodviainstance_methodは、メソッドを宣言したクラスのオブジェクトにしかバインドできないため、法案に適合しません。selfメソッド本体の内部をproc(を使用して)のように再解釈することはできませんinstance_exec

同様に、Method取得したviamethodself、の受信者にバインドされており、method変更できないため、問題ありません。

編集(明確化):

私がやろうとしているのは、あるクラスで定義されたメソッドを取得して、それを別のクラスに転送することです。selfこれは、メソッド内の意味を再解釈できる必要があることを意味します。sの場合、これはandprocを介して可能ですが、メソッドの場合は不可能です。instance_execinstance_eval

メソッドをあるクラスから別のクラスに移動しようとしているのはなぜですか?簡単に言うと、名前空間の形式を実装するために、Rubyによって提供される可視性コントロールに最も不満があります(モジュールメンバーを包含クラスに隠す方法はありません)。ただし、これはこの質問の範囲をはるかに超えています。

4

1 に答える 1

4

多分to_procからMethodあなたを助けることができます:

class A
  def test
    puts 'this is a test'
  end
end

m = A.new.method(:test)

m.to_proc.call #=> this is a test

更新:単なるアイデア

sourcify gemを使用procして、最初のオブジェクトからソースに変換し、2 番目のオブジェクトのコンテキストでそれを評価します。

于 2012-09-07T11:19:01.147 に答える