[解決済み] lambdaを使うべきか、Proc.newを使うべきか?
2022-03-17 02:53:33
質問
Ruby 1.8では、proc/lambdaの間に微妙な違いがあります。
Proc.new
があります。
- その違いとは何でしょうか?
- どちらを選ぶべきかの判断の目安を教えてください。
- Ruby1.9ではprocとlambdaは別物です。どうなっているんだ?
どのように解決するのか?
で作成されたプロックのもう一つの重要な、しかし微妙な違い。
lambda
で作成されたプロックと
Proc.new
をどのように扱うかです。
return
ステートメントを使用します。
-
の中に
lambda
-が作成されたプロックではreturn
文はプロック自身からしか返しません -
での
Proc.new
-を作成したプロックではreturn
文はもう少し驚くべきもので、procからだけでなく、コントロールを返すのです。 のみならず、その proc を包含するメソッドからも取得できるのです!
ここで
lambda
-作成されたプロックの
return
を実行中です。おそらく皆さんが期待するような挙動をします。
def whowouldwin
mylambda = lambda {return "Freddy"}
mylambda.call
# mylambda gets called and returns "Freddy", and execution
# continues on the next line
return "Jason"
end
whowouldwin
#=> "Jason"
では、ここで
Proc.new
-を作成したプロックの
return
が同じことをやっている。Rubyが「最小驚きの法則」を破るケースをご覧ください。
def whowouldwin2
myproc = Proc.new {return "Freddy"}
myproc.call
# myproc gets called and returns "Freddy",
# but also returns control from whowhouldwin2!
# The line below *never* gets executed.
return "Jason"
end
whowouldwin2
#=> "Freddy"
この意外な動作のおかげで、(タイプ数が少ないこともあって)私は
lambda
オーバー
Proc.new
を作成する際に使用します。
関連
-
[解決済み】そのようなファイルやディレクトリはありません @ rb_sysopen ruby
-
[解決済み】Rubyで "gets "と "gets.chomp "を使用する方法
-
[解決済み] Ruby、スタックレベルが深すぎる (SystemStackError)
-
[解決済み] 配列からランダムに選択する方法は?
-
[解決済み] リスト内包とラムダ+フィルタの比較
-
[解決済み] Rubyのmapとcollectの違い?
-
[解決済み] PythonにMultiline Lambdaはない。なぜダメなのか?
-
[解決済み] Ruby、execとsystemと%x()またはBackticksの違いについて
-
[解決済み】C++11のラムダ式って何?
-
[解決済み】RubyのDateTimeとTimeの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】RVMをアンインストールする方法は?[重複] RVMのアンインストール方法
-
[解決済み】ActionController::UnknownFormat
-
[解決済み] Rubyでファイル名を変更するには?
-
[解決済み] ルビーです。そのようなファイルやディレクトリはありません @ rb_sysopen - testfile (Errno::ENOENT)
-
[解決済み] Ruby - 文字列を日付に変換する
-
[解決済み] Ruby Detect方式
-
[解決済み] あなたが提供した認証メカニズムはサポートされていません。AWS4-HMAC-SHA256を使用してください。
-
[解決済み] rubyでディレクトリからすべてのファイルを要求する最良の方法?
-
[解決済み] string literal in condition "とはどういう意味ですか?
-
[解決済み】Rubyのprocとlambdaの違いとは?