【Ruby3.x】Proc::lambda?()メソッドの使い方
lambda?メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
lambda?メソッドは、レシーバであるProcオブジェクトが、lambdaとして作成されたものかどうかを判定するメソッドです。Rubyでは、do...endや{}で囲まれたコードのまとまり(ブロック)をオブジェクトとして扱えるようにしたものをProcオブジェクトと呼びます。このProcオブジェクトには、通常のブロックから作られたものと、特別な形式であるlambdaによって作られたものの二種類が存在します。
lambdaはProcの一種ですが、いくつかの重要な特徴を持っています。一つは、引数の数を厳密にチェックするという点です。lambdaに渡す引数の数が定義と異なると、ArgumentErrorというエラーが発生します。もう一つは、return文の挙動が異なる点です。lambda内でreturnを実行すると、そのlambda自身から抜け出し、呼び出し元に制御が戻ります。これに対し、通常のProcオブジェクト内でreturnを実行すると、そのProcが定義されたメソッド自体から抜け出す「非ローカルリターン」という挙動になります。
このlambda?メソッドは、渡されたProcオブジェクトがこれらのlambda特有の振る舞いをするかどうかを真偽値で教えてくれます。lambdaであればtrueを、そうでなければfalseを返します。これにより、開発者はProcオブジェクトの性質を事前に把握し、引数の渡し方やreturnの挙動を考慮した安全なコードを記述できるようになります。
構文(syntax)
1l = -> { } 2puts l.lambda? 3 4p = Proc.new { } 5puts p.lambda?
引数(parameters)
引数なし
引数はありません
戻り値(return)
Boolean
このメソッドは、レシーバー(メソッドを呼び出したオブジェクト)がProcオブジェクトとして生成されたラムダである場合に真(true)を、そうでなければ偽(false)を返します。