rubyメタプログラミング-動的に追加されたメソッドでyieldブロックが機能しない
-
05-07-2019 - |
質問
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を使用できるようになっています。しかし、それが機能するかどうか、条件付きブロックを許可するかどうかはわかりません。