rubyメタプログラミング-動的に追加されたメソッドでyieldブロックが機能しない

StackOverflow https://stackoverflow.com/questions/1604776

質問

rspecのスタブメソッドの NotAMock フレームワークの拡張に取り組んでいます。メソッドブロックにスタブを譲ります。

このGistのコードは、コーディングすると完全に機能します自分で(これはNotAMockがメソッドをスタブする方法に似ているように仕上げられています)。

しかし、object.instance_eval ...コードをNotAMockフレームワークに組み込むと、" block_given?"常にfalseを返します。そのため、yieldを機能させることはできません。メソッドは正しく追加され、スタブメソッドを呼び出すことができます...しかし、NotAMockスタブバージョンからメソッドに渡すブロックを認識しません。

このコードをNotAMockフレームワークにどのように組み込んだかを確認するには、 myにアクセスしてください。 NotAMockのクローンおよび「add_hook」をチェックアウトします;プライベートメソッドのメソッド。

これは質問するのが少し難しいことを知っています...私はいくつかのガイダンスを見つけたいと思っています。一日中夢中になっています。

役に立ちましたか?

解決 2

この問題は、リンク先のコードとは無関係であることが判明しています... NotAMockフレームワークは、私の問題の原因となっている追加のメソッド再定義を行っています。この問題を特定の1行のコードに絞り込み、今すぐ修正する方法を検討中です。

他のヒント

これが可能かどうかさえわかりません。新しいProcはブロックさえ認識しません。

proc = Proc.new do
  if block_given?
    yield
  else
    puts "Not in a block"
  end
end

proc.call { puts "In a block"} # => puts Not in a block

Ruby 1.9では、ブロックがパラメーターとして& blockを使用できるようになっています。しかし、それが機能するかどうか、条件付きブロックを許可するかどうかはわかりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top