是啥! (感叹号)在 FreeMarker 中做啥?

Posted

技术标签:

【中文标题】是啥! (感叹号)在 FreeMarker 中做啥?【英文标题】:What does the ! (exclamation point) in FreeMarker do?是什么! (感叹号)在 FreeMarker 中做什么? 【发布时间】:2020-05-03 22:54:02 【问题描述】:

我一直在 Magnolia code examples 的 FreeMarker 代码末尾看到感叹号。例如:

$content.header!

感叹号叫什么,有什么作用?

【问题讨论】:

这能回答你的问题吗? Handling null values in Freemarker 这能回答你的问题吗? Exclamation mark behind assigned value: A = B ! C @JasperdeVries 这很接近,但没有提供直接答案或“默认值运算符”定义的直接来源。 @Jan 这很相似,但引用了一个标记为 javascript 的交换。搜索此问题的 FreeMarker 答案的人会发现这种交换就足够了吗? 【参考方案1】:

感叹号称为default value operator。它用于在插值 ($...) 返回 null 时设置默认值。如果没有设置默认值,则返回一个空字符串("")。

$content.header!
<#-- Returns "" if content.header is null -->

$content.header!"Example Header"
<#-- Returns "Example Header" if content.header is null -->

请参阅Dealing with missing variables 了解更多信息。

【讨论】:

错了。如果变量为 null 并且您尝试在不通过感叹句语法提供默认值的情况下打印它,freemarker 将打印错误。请参阅freemarker.apache.org/docs/… 和freemarker.apache.org/docs/app_faq.html#faq_null 了解更多信息。 @Jan 我在 FreeMarker 文档上看到了这个:“如果省略默认值,那么它将同时是空字符串、空序列和空哈希。” freemarker.apache.org/docs/…。我已经多次使用默认值运算符而没有默认值,并且从未见过任何错误。我错过了什么吗? 我想我在阅读上面的声明时太快了。我读的是“如果没有设置 [属性] 的值,它将返回空字符串”,这是错误的。但是您所指的是感叹号后的“默认值”,确实可以省略,默认为空字符串。我很抱歉。 @Jan 不需要道歉。我们都会在某个时候草草得出结论。我很高兴在 Stack Overflow 上与您互动,期待未来的交流。

以上是关于是啥! (感叹号)在 FreeMarker 中做啥?的主要内容,如果未能解决你的问题,请参考以下文章

“?”是啥意思?和“:”在布尔语句中做啥? [复制]

??!??! 是啥意思?运算符在 C 中做啥?

java编程:eclipse 中感叹号是啥意思?需要做啥处理?缺省包和jre系统库是干啥的?本分人新手!

startMonitoringFromRegion - 在 didEnterRegion 中做啥?

:: 在 PostgreSQL 中做啥? [复制]

|=(管道等号)符号在python中做啥?