クロージャ
Javascriptなどで利用されるクロージャ機能はCurlにもあります。これは匿名プロシージャとも呼ばれます。これにはprocマクロを利用します。また、プロシージャとして型定義を指定するために、proc-typeマクロが用意されています。この機能を具体例に沿って説明していきたいとおもいます。
{curl 6.0 applet} {value {output {p 10, 20}} || 30 |
ここでは、単純な足し算のクロージャを例にとって説明します。まず、クロージャを作成するには、procマクロを利用します。procマクロの引数に、実際に必要な引数(ここで足し算する2つの値aとb)を”{“と”}”で囲み、その後戻り値を”:”の後に記載します。あとは、中身のロジックを記載していきます。(ここでは足し算をし、結果を返すというものです。)また、このクロージャ自体を変数に代入する場合(上記の例では、pという変数に代入)、変数の型を定義するため、上記のようにproc-typeマクロを利用します。
このプロシージャを実行するには、変数名を”{“と”}”で囲み、実行します。例えば、上記のように{p 引数, 引数}のようにいます。また、この変数をさらに他のプロシージャやメソッドの引数として指定できますので、Javascriptでよく利用されるコールバック関数的な使い方もできます。
グローバル・プロシージャ(関数)
Curlでは、グローバルな関数(プロシージャ)も作成することができます。具体例を以下に記載します。
{curl 6.0 applet} {define-proc public {add a:int, b:int}:int {value |
これを作成するには、define-procマクロを利用します。あとは、メソッドを作成するようのと同様に記載し、利用いたします。(もちろんpublic以外のプロシージャも作成できます。)
ラムダ式
C#でもサポートされているラムダ式がCurlでも利用できます。これによりプロシージャを利用する際、コード量を減らすことができます。サンプルは以下のようになります。
|| 通常のプロシージャ || ラムダ式(fnというマクロ。C#と同様=>演算子を利用します。 |
関連ドキュメント