【Ruby3.x】Proc::curry()メソッドの使い方
curryメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
curryメソッドは、Procクラスのインスタンスに対して呼び出され、複数の引数を取るProcオブジェクトに対し、その引数の一部を事前に固定し、残りの引数を後から受け取るように変換するメソッドです。この機能は、関数型プログラミングにおける「カリー化(currying)」または「部分適用」と呼ばれます。
具体的には、あるProcオブジェクトが複数の引数を必要とする場合、curryメソッドを適用すると、新しいProcオブジェクトが生成されて返されます。この新しいProcオブジェクトは、元のProcオブジェクトが要求する引数のうち、まだ与えられていない残りの引数を待つ状態です。必要な全ての引数が段階的に与えられるまで、curryによって生成されたProcオブジェクトは、さらに新しいProcオブジェクトを返し続け、全ての引数が揃った時点で最終的に元のProcオブジェクトの処理が実行されます。
curryメソッドには、オプションで数値(アリティ)を引数として渡すことができます。これは、最終的に生成されるProcオブジェクトが受け取る引数の総数を指定するものです。この引数を省略した場合、元のProcオブジェクトが定義している引数の数がデフォルトとして使用されます。
このメソッドを利用することで、共通する引数を持つ処理を、特定の引数を固定したより特化した形で再利用しやすくなります。これにより、コードの柔軟性と可読性が向上し、汎用的なProcオブジェクトから効率的に特定の機能を持つProcオブジェクトを生み出すことが可能です。
構文(syntax)
1add_numbers = Proc.new { |x, y, z| x + y + z } 2curried_add = add_numbers.curry 3sum = curried_add.call(1).call(2).call(3)
引数(parameters)
arity = nil
- arity = nil: カリー化されたProcオブジェクトが受け付ける引数の数。nilを指定すると、元のProcオブジェクトの引数の数になります。
戻り値(return)
Proc
curry メソッドは、引数を部分適用できる新しい Proc オブジェクトを返します。これにより、多引数関数を段階的に適用することが可能になります。