0
說我有一個FreeMarker的宏:是否可以插入freemarker宏?
<#macro helloObject>
World
</#macro>
我可以在某些情況下很容易地把它稱爲:
Hello, <@helloObject/>!
但是,什麼是內插它,例如語法,如果它是一個字符串的一部分?
<#assign greeting="Hello, <@helloObject>!" /> <#-- doesn't work -->
<#assign greeting="Hello, ${helloObject}!" /> <#-- doesn't work -->
<#assign greeting="Hello, ${@helloObject}!" /> <#-- doesn't work -->
<#assign greeting="Hello, ${<@helloObject/>}!" /> <#-- doesn't work -->
<#assign greeting="Hello, @helloObject!" /> <#-- doesn't work -->
${greeting}
宏的結果不能(容易)分配的原因是,它像功能VS某些語言的程序;宏意味着被稱爲他們的副作用(其中一個是打印到輸出流)。但實際上可以將捕獲到的宏輸出分配給一個變量,但這是一個糟糕的做法,因爲很容易搞砸自動轉義,然後('<@...>'因爲它意味着輸出標記而不會被轉義,但是'$ {someCapturedOutput}受自動轉義影響)。 – ddekany
所以我在這裏遇到了一些困難。一方面,我認爲我想使用宏,因爲宏將主要輸出HTML(也許在那裏也有一點自由標記插值)。但另一方面,它使得使用函數更簡單。哪一個更糟糕 - 使用函數來編寫僅僅爲了副作用而調用的東西,或者將宏的輸出分配給變量? – brentonstrine