キーワード引数と残余引数

Curlにはキーワード引数残余引数という独特な引数を付与できます。

通常の引数

プロシージャやメソッド等の通常の引数では以下のようにします。

|| プロシージャの作成
{define-proc public {my-proc1 i:int}:void
   || 処理
}

{my-proc1 100} || 実行

キーワード引数(Keyword Argument)

Curlの持つキーワード引数とは、「引数 = 引数のデフォルト値」というように、プロシージャやメソッド等にセットします。以下に例を記載します。 

|| プロシージャの作成
{define-proc public {my-proc2 i:int = 100}:void
    || 処理
}

{my-proc2 i = 200}
{my-proc2} || {my-proc2 i = 100}と同等

また、複数キーワード引数を指定することや通常の引数と混合させることができます。 

|| プロシージャの作成
{define-proc public {my-proc3 
                                 str:String,
                                 i:int = 100,
                                 f:float = 1.0
                            }:void
    || 処理
}

{my-proc3 “abc”, i = 200}
{my-proc3 “efg”, f = 2.0}
{my-proc3 “xyz”}
{my-proc3 “abc”, i = 200, f = 2.0}

キーワード引数の利点としては、キーワード引数の値をセットする必要がなければ省略できますし、順番が前後しても特に問題がありません。

残余引数(Rest Argument)

残余引数とは、引数に名前(変数)を持たない引数を、無制限に受け取ることができます。これは3つのピリオド…”として指定します。また、”…:String”のように、型を指定することができます。

{define-proc public {my-proc4 }:void
}

{define-proc public {my-proc5 i:int, …:String}:void
}

プロシージャの中では以下のようにコンテナループでそれぞれの引数を順に取得することができます。 

{define-proc public {my-proc6 }:void
    {for v in do
        {output v}
    }
}

{my-proc6 “abc”, “def”, 123, 1.0, true}

ちなみに残余引数の数を算出するにはcount-argumentsマクロを利用します。例えば、{count-arguments …}のようになります。

詳細については、こちらを参照ください。