Method#curry

新しく追加されたメソッドです。いままでもProc#curryは存在していましたが、Methodもカリー化できるようになります。

lambdaの引数違い

NEWSから引用すると

ArgumentError is no longer raised when lambda Proc is passed as a block, and the number of yielded arguments does not match the formal arguments of the lambda, if just an array is yielded and its length matches.

とのことで、lambdaオブジェクトに渡す引数が想定と違っていた場合、2.1まではArgumentErrorが発生していましたが、2.2では(Procと同じように)例外を発生させなくなりました。

昨年書いた 3/3 ブロックとイテレータ、および手続きオブジェクトProcとlambdaについて - Ruby - All About という記事の中で、

Procとlambdaにはいくつかの違いがあり、おおまかに言うとlambdaの生成する手続きオブジェクトの方が、Procの生成する手続きオブジェクトに比べてメソッドに近い挙動をします。

  1. 引数の数に厳密なのがlambda、寛容なのがProc

と書きましたが、lambdaも引数の数に寛容になり、Procとの差異のひとつがなくなり両者が近づいたことになります。

※ なお、発端Issueは Bug #9605: Chaining "each with index.detect &lambda" raises ArgumentError - Ruby trunk - Ruby Issue Tracking System であると思われます。上記のコード例もここから引用しました。

以上

以上でRuby2.2.の新機能・仕様変更についての紹介は終わりです。

最終ページで「カリー化」をさらっと流してしまいましたが、興味深いテーマなのでRubyを使った解説をいずれ書きたいと思います。



※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。