※procとはProc.newで生成されるオブジェクトを指しています。
結論
結論から言うとどちらでもよい。
どちらを使うべきかというタイトルで、どちらでもよいという結論にしてしまって申し訳ないのですが、、、
始めに思っていたこと
procとLambdaの違いはreturn
やbreak
の挙動の違いと、引数の数の検証です。ここでreturn
やbreak
の挙動は関係ないと思ったので、引数の数の検証をしてくれるLambdaを使うのがよいと思いました。しかし、Lambdaを使ったときに引数を取っても取らなくてもエラーがでないので、なぜだという感じでした。
ActiveRecordの処理
紐解くカギのmake_lambdaでは、引数の数に応じて処理が書かれて、instance_exec
の引数としてproc, Lambdaが渡されてました。なので、procでもLambdaでもどちらでもよいということになります。
ちなみに、Rails guides Active Record Validationsでは、Procを使えるとの記述があるのですが、Lambdaが使えるとの記述はないです。問題なく使えますが。Rails guidesではa Proc objectと書かれているので、Lambdaも含まれます。
あとがき
Client side validationsを使うときに:if
と:unless
のオプションにLambdaを使えない不具合があったのですが、使えるようになりました。PRを送るためにActiveRecorde
のコードを読んでみました。コードを読むと色々勉強になるね。一応、PRを送ったのだけど、僕のPRはクローズされてコミットがこのPRに取り込まれてたw #686