expand-template (マクロ)
パッケージ: CURL.LANGUAGE.COMPILER

渡されたリテラル テキストを表す Curl ソース コードを返します。特殊な ? エスケープ文字が変数名またはプレフィックス式に付いている箇所には値が代入されて返されます。

注意事項

expand-template は主に define-macro と共に使用します。

構文

{expand-template [source-info = source-info, ] code-template}
source-info: 結果のソース コードのソース ロケーション情報をオプションで指定します。このパラメータ値は SourceLocation 型で指定する 必要があります。
code-template: Curl ソースコードを表すテキスト。?exp のフォームの式を含むことがあります。ここで exp は通常、変数で、その型は CurlSource または {Array-of CurlSource} ですが、中かっこで囲まれた Curl プレフィックス式である場合もあります。

戻り値

code-template を含む CurlSource オブジェクト。この code-template では CurlSource 型の 1 つ以上の値がつながれて、?expression の各インスタンスを置き換えます。

説明

代替の値は CurlSource オブジェクト、または {Array-of CurlSource} です。配列の要素すべてが code-template につなぎ合わされます。

expand-template で返される出力内に疑問符を生成するには、2 つの疑問符 ?? を使用します。

    {do
        let a:Literal = {Literal x + y}
        let print-a:CurlSource = {expand-template {output ?a}}
    }


次の例は、expand-templatedefine-macro と共に使用する方法を示します。ここで、外部マクロは、それが定義されたのと同じアプレットまたはパッケージ内で起動することはできないので、使用する前に定義を別のパッケージからインポートすることが必要であることに注意してください。

{define-macro public {swap ?a:identifier, ?b:identifier}
    {return
        {expand-template
            set (?a,?b) = (?b,?a)
        }
    }
}