[解決済み】Rubyのprocとlambdaの違いとは?
2022-04-12 09:36:44
質問
また、どのような場合にどちらかを使うのでしょうか?
どのように解決するのですか?
1つの違いは、引数の扱い方です。を使った proc を作成する場合
proc {}
と
Proc.new {}
は等価です。しかし
lambda {}
は、渡された引数の数をチェックする proc を提供します。から
ri Kernel#lambda
:
に相当します。 Proc.new ただし、結果の Proc オブジェクトは、呼び出されたときに渡されたパラメータの数をチェックします。
一例です。
p = Proc.new {|a, b| puts a**2+b**2 } # => #<Proc:0x3c7d28@(irb):1>
p.call 1, 2 # => 5
p.call 1 # => NoMethodError: undefined method `**' for nil:NilClass
p.call 1, 2, 3 # => 5
l = lambda {|a, b| puts a**2+b**2 } # => #<Proc:0x15016c@(irb):5 (lambda)>
l.call 1, 2 # => 5
l.call 1 # => ArgumentError: wrong number of arguments (1 for 2)
l.call 1, 2, 3 # => ArgumentError: wrong number of arguments (3 for 2)
また、Ken が指摘するように
return
はそのラムダの値を返します。
return
の中で、囲んでいるブロックの値を返します。
lambda { return :foo }.call # => :foo
return # => LocalJumpError: unexpected return
Proc.new { return :foo }.call # => LocalJumpError: unexpected return
ですから、ほとんどの場合、同じように使えます。しかし、引数を自動的に厳密にチェックしたい場合(これはデバッグにも役立つことがあります)、あるいは
return
文を使ってプロックの値を返します。
lambda
.
関連
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] gemのインストールで --no-ri --no-rdoc をデフォルトにするには?
-
[解決済み] rake db:migrate db:reset とdb:schema:loadの違いについて
-
[解決済み] イコール、エクル、==、==の違いは何ですか?
-
[解決済み] Rubyのincludeとrequireの違いは何ですか?
-
[解決済み] クラスとモジュールの違い
-
[解決済み] Rubyのmapとcollectの違い?
-
[解決済み】Rubyのincludeとextendの違いって何?
-
[解決済み】Rubyの "and "と"&&"の違い?
-
[解決済み】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 use ...' でルビーを選択してもうまくいきません。
-
[解決済み] Rubyでnil値をマッピングして削除する方法
-
[解決済み] 配列に何かを追加しようとしたときに、nil から整数への暗黙の変換が行われない。
-
[解決済み] 文字列の文字をアルファベット順に並べるには?
-
[解決済み] Rubyで中央値を計算する
-
[解決済み] Rubyでファイルを移動するにはどうしたらいいですか?
-
[解決済み] プロキシ(ISA-NTLM)の後ろからRuby Gemsをアップデートする方法
-
[解決済み] 変数が整数であるかどうかのチェック
-
[解決済み] JanusのセットアップにVIMプラグインを追加する
-
[解決済み] lambdaを使うべきか、Proc.newを使うべきか?