之间的区别?? , has_content , if_exists 在 freemarker
Posted
技术标签:
【中文标题】之间的区别?? , has_content , if_exists 在 freemarker【英文标题】:Difference between ?? , has_content , if_exists in freemarker 【发布时间】:2014-06-26 10:59:38 【问题描述】:freemarker 中的以下内容有什么区别?
!
has_content
??
if_exists
我用过??而不是 has_content ,它会导致如此巨大的问题。搞砸了我的一天。我真的需要弄清楚这件事。
当我使用时
!(xyz.abc!)?? -- it dint work
当我使用时
!(xyz.abc!)?has_content ... it did work
不是吗??或 has_content 或 if_exists 检查相同的东西?
【问题讨论】:
见文档freemarker.org/docs/dgui_template_exp.html 【参考方案1】:??
告诉左手操作数的值是否丢失(意味着它是 Java null
或者您在那里有一个未定义的变量),并相应地返回 false
(丢失)或 true
(未丢失)。
?has_content
与??
非常相似,除了它还为长度为 0 的字符串或空 FTL 序列(如 java.util.List
、Java 数组等)或空 FTL 哈希(如 @ 987654337@等)。 (对于 0
、布尔值 false
等,它不会返回 false
)
!
用于在缺少值时提供默认值(再次表示它是 Java null
或者您有未定义的变量),例如 color!"no color"
。如果省略!
的右手操作数,则默认值为空字符串和空序列以及同时的空哈希(多类型值),这对于编写<#list things! as thing>
、@ 之类的东西很方便987654346@.
?if_exists
是 ??
的旧写法。不要使用它。
当我们在这里时,请注意所有这些运算符仅涵盖点式或 []
表达式的最后一步,例如 user.price!0
仅在 user
中缺少 price
时处理,但在 user
中不处理时不处理本身就不见了。要涵盖这两种可能性,请使用 (user.price)!0
,它会处理在评估 ()
期间抛出的所有缺失变量错误,无论它们来自何处。
【讨论】:
“有据可查”的声明值得一些链接 :) has_content、default value operator !、missing value test?? 和 old style if_exists?has_content
总是有用的,除了值是 Boolean
或 Number 1/0 for yes/no
如果此买家不在<#elseif buyer.company?has_content >
中,它会给出异常未定义如何检查买家是否存在,我尝试了以上所有方法!
@shareef 如果只有buyer
可以丢失,但如果它在那里,那么company
总是在那里,那么<#elseif buyer??>
,否则<#elseif (buyer.company)??>
或<#elseif (buyer.company)?has_content>
。 ()
使存在处理程序运算符覆盖整个表达式。以上是关于之间的区别?? , has_content , if_exists 在 freemarker的主要内容,如果未能解决你的问题,请参考以下文章
int p = *(int *)i 和 int p = *(int *)&i 之间的区别