之间的区别?? , 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 总是有用的,除了值是 BooleanNumber 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 之间的区别

python中的while i和j / while j和i之间的区别[重复]

使用数组和指针偏移表示法之间的实际区别

效率 ?这些代码之间有啥区别吗? [复制]

selectpollepoll之间的区别

机组考研小知识点I/O指令—通道指令—-通道程序之间的区别