fn (マクロ)
パッケージ: CURL.LANGUAGE.COMPILER

シグネチャ

{fn {[arg-def-list]}[:return-type]
    code-body
}
または {fn ([arg-def-list]) => code-body} または {fn [arg-names] => code-body}

パラメータの型を推測する匿名プロシージャです。

説明

これは、proc 構文を展開します。コンテキストを呼び出すことで、省略されている型を推測します。他にも、省略されているパラメータの型、戻り値、省略されている位置引数、キーワード引数も推測します。 コンパイラがターゲットのプロシージャ型を分かっている場合に、それを含むコンテキストでのみ型を推測することが可能です。一般的に、プロシージャが既知のプロシージャ型の変数に割り当てられる時に推測されます。幸いにも、これは匿名プロシージャで頻繁に発生する状況です。型を推測することが不可能な場合、構文の => 変形 (variant) が使用されると構文エラーをスローします。しかし、それが使用されないと proc 構文のように振舞います。allow-implicit-any-declarations? ディレクティブが false でない限り、省略された型は既定で any となります。 code-body 内で必要がなければ、型の宣言、戻り値、使用されないパラメータを引数の宣言で省略することが可能になります。さらに、... 残余引数は code-body 内で使用される場合でも、省略することが可能です。引数のリストの最後にある位置引数だけは省略可能であることに注意してください。たとえば、 {fn x,,y => x + y} と記述することができます。 構文の => 変形 (variant) は、戻り値が期待される場合に暗黙的に code-body{return {value code-body}} へ変換します。 構文の => フォームでは、引数がキーワード引数のように単純な識別子以外の場合、引数の外に () が必要です。たとえば、{fn (x = 1) => x} と記述します。


例: fn プロシージャ宣言の使用
{value
    def a = {new {Array-of int}, 6, 1, 4, 5, 3, 2, 8, 7}
    {a.sort comparison-proc = {fn x, y => x >= y}}
    def odds = {a.filter-clone {fn x => {bit-and x, 1} == 1}}
    odds.underlying-FastArray
}
導入: バージョン 6.0