は、インスタンス最小の引数
<#macro m a b c...>
のためにあなたは、マクロの呼び出し中に3つの引数または2の最小値を渡す必要がありますか?パラメータc
は少なくとも1つの値を持っていなければなりませんか?また、デフォルトでnullとしてパラメータを指定する方法はありますか?
は、インスタンス最小の引数
<#macro m a b c...>
のためにあなたは、マクロの呼び出し中に3つの引数または2の最小値を渡す必要がありますか?パラメータc
は少なくとも1つの値を持っていなければなりませんか?また、デフォルトでnullとしてパラメータを指定する方法はありますか?
マクロで可変パラメータを使用する場合は、最後の引数に値を渡す必要はありません。例えば
:
<#macro m a b c...>
a = ${a!}
b = ${b!}
<#list c?keys as attr>
${attr} = ${c[attr]}
</#list>
</#macro>
<@m a='A' b='B' />
<@m a='A' b='B' c='C' d='D'/>
ウィル出力:
a = A
b = B
a = A
b = B
c = C
d = D
<#macro name param1 param2 ... paramN>
...
<#nested loopvar1, loopvar2, ..., loopvarN>
...
<#return>
...
</#macro>
:
したがって、マクロがNパラメータを取るために任意の制限はありません見ることができるように。
この構造体は、(名前空間機能を知っている場合は、現在の名前空間に)マクロ変数を作成します。マクロを初めて使用していて、user-defined directivesの場合は、ユーザー定義ディレクティブのチュートリアルをお読みください。
マクロ変数には、ユーザ定義ディレクティブとして使用できるテンプレートフラグメント(マクロ定義ボディ)が格納されます。変数には、ユーザー定義ディレクティブに許可されたパラメータの名前も格納されます。 変数asディレクティブを使用する場合は、デフォルト値を持つパラメータを除いて、これらのすべてのパラメータの値を指定する必要があります。マクロを呼び出すときにパラメータの値を指定しない場合にのみ、デフォルト値が使用されます。
変数はテンプレートの先頭に作成されます。マクロディレクティブがテンプレートのどこに置かれているかは分かりません。
例:パラメータを持つマクロ:
<#macro test foo bar baaz>
Test text, and the params: ${foo}, ${bar}, ${baaz}
</#macro>
<#-- call the macro: -->
<@test foo="a" bar="b" baaz=5*5-2/>
出力:
Test text, and the params: a, b, 23
例:パラメータとデフォルトのパラメータ値を持つマクロ:
<#macro test foo bar="Bar" baaz=-1>
Test text, and the params: ${foo}, ${bar}, ${baaz}
</#macro>
<@test foo="a" bar="b" baaz=5*5-2/>
<@test foo="a" bar="b"/>
<@test foo="a" baaz=5*5-2/>
<@test foo="a"/>
出力:
Test text, and the params: a, b, 23
Test text, and the params: a, b, -1
Test text, and the params: a, Bar, 23
Test text, and the params: a, Bar, -1
はしかし、あなたの質問の最後の部分についてexplanationがあります:
null参照設計によってFreeMarkerのエラーです。カスタムnull値(文字列)を定義することは、あなたが言及した理由のためには良い考えではありません。以下の構築物は、代わりに使用する必要があります。
マクロでデフォルトのパラメータ値として空のシーケンスを指定し、空であるかどうかをテストすることができます。
私はあなたが答えるために時間を割いて感謝し、私はFreeMarkerの –
@AnnMathewsのマクロについて話しているはい、私はそれを修正しました、それはあなたのために役立つことを願っています – Ssein
私はあなたの答えに 'paramN'のような可変パラメータを持っていれば、その値を与える必要がありますか?あるいは、それを無視することはできますか? –