私はRubyを知らず、今ではいくつかのドキュメントを読んでいます。 コードブロックの使用について読んだ直後に「yield」キーワードを使用することは、複数のコードブロックを関数に渡すことが可能かどうかであり、呼び出された関数内から任意に両方を使用できるかどうかです。Rubyの関数に複数のコードブロックを渡すには?
6
A
答えて
9
一度にブロックを1つだけ渡すことができますが、ブロックは実際にはProc
のインスタンスであり、パラメータとして必要な数のインスタンスを渡すことができます。
def mymethod(proc1, proc2, &block)
proc1.call
yield if block_given?
proc2.call
end
mymethod(Proc.new {}, Proc.new {}) do
# ...
end
しかし、ほとんど意味がありません。
1
構文では、yield
ステートメントを使用すると、関数に渡されるコードブロックが1つだけサポートされます。
もちろん、複数の他の関数またはコードブロックオブジェクト(Proc
オブジェクト)を関数に渡して使用することはできますが、単にyield
を使用することではありません。
1
Proc
オブジェクトを作成し、好きなだけ多くのオブジェクトを渡すことができます。
Rubyが持っているブロックとクロージャのような構造のすべての微妙さを理解するために、this pageを読むことをお勧めします。
1
あなたには渡された2つの別々のブロックを処理するためにcall
方法ではなく、歩留まりを使用することができます
をここに方法は次のとおりです。あなたが例えばに引数を渡すことができ
def mood(state, happy, sad)
if (state== :happy)
happy.call
else
sad.call
end
end
mood(:happy, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
mood(:sad, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
:
happy.call('very much')
議論はあなたがブロックで期待するように機能します:
Proc.new {|amount| puts "yay #{amount} !"}
関連する問題
- 1. 関数ブロック/関数ポインタにコードブロックを渡すJavaScript
- 2. コードブロックをスタイラスの関数またはミックスインに渡す方法
- 3. 複数のPHP変数をajax関数onclickに渡すには
- 4. Haskell - 関数に複数の関数を渡す
- 5. 複数の行をPostgreSQL関数に渡すには?
- 6. c - 複数の引数をGTKのコールバック関数に渡す
- 7. Powershellで関数の変数に複数のパラメータを渡す
- 8. Rubyコードブロックとjavascriptの匿名関数の違い
- 9. 同じパラメータを複数の関数に渡す方法は?
- 10. Pythonは複数のREGEXマッチを関数に渡します。
- 11. Laravel Policies - 複数の引数を関数に渡す方法
- 12. 変数を複数の関数に渡す方法
- 13. 複数の変数をGearmanワーカー関数に渡す
- 14. Codeigniterが複数のコントローラ関数に変数を渡す
- 15. 複数の引数を適用関数に渡す方法
- 16. 複数ワードの引数をbash関数に渡す
- 17. 複数の引数を関数に渡す?
- 18. 複数の引数をスレッド関数に渡すpthread_create
- 19. 同じコンテキスト変数を複数の関数ビューに渡す
- 20. 同時に複数のデータフレームを関数に渡す
- 21. 関数から別の関数に変数を渡すには?
- 22. 複数のEval()をASPXのJavaScript関数に渡す
- 23. Rubyで関数を名前で渡す
- 24. 関数出力で複数の関数ハンドルを渡す
- 25. JQueryを使用してフォームデータを複数の関数に渡す
- 26. プロトタイプのonSuccess関数に複数の引数を渡す方法は?
- 27. 1つのVecをRustの複数の関数に渡すには?
- 28. 複数のパラメータをとる関数にベクトルの値を渡すには
- 29. Javascript関数のパラメータにRuby文字列を渡す
- 30. str.format()関数に複数の文字列を渡す方法
ブロックは正確にはプロックではありません。彼らは共通の使用法と構文を持っていますが、混乱する動作を引き起こすのに十分な実装上の違いがあります。ちょっとしたことだけど、スコープの違いは私には少し前からある。 – fengb
@fengb私はちょうどテストをしました。 http://gist.github.com/242746 Procとブロックの違いについてもう少し詳しくはありますか? RubyはブロックがProcであると私に伝えています。 –
ブロックは、&var構文を使用してprocに暗黙的に「型キャスト」されます。しかし、ブロックとプロキシとして使用すると、動作が異なる動作があります。 長時間巻きだが包括的な比較: http://innig.net/software/ruby/closures-in-ruby.rb – fengb