28
A
回答
49
6
该宏提供一种更简单的方式做三元操作:
<#macro if if then else=""><#if if>${then}<#else>${else}</#if></#macro>
它易于使用,看起来不错,相当的可读性:
<@if someBoolean "yes" "no"/>
需要注意的是@if
- 而不是内置指令中的#if
。这里是一些更多的例子。
<!-- `else` is optional -->
<@if someBoolean "someBoolean is true"/>
<!-- expressions -->
<@if (someBoolean||otherBoolean) "hello,"+user.name 1+2+3 />
<!-- with parameter names -->
<@if someBoolean then="yes" else="no" />
<!-- first in list? -->
<#list seq as x>
<@if (x_index==0) "first" "not first"/>
<#list>
由于某些原因,如果它们是非布尔表达式,不能在无名参数周围添加括号。这可能会提高可读性。
1
您可以自定义一个函数if
即宣告像这样:
<#function if cond then else="">
<#if cond>
<#return then>
<#else>
<#return else>
</#if>
</#function>
功能可以在任何${...}
表达式中使用。您的代码看起来像这样:
<a href="${if(a, 'a.htm', 'b.htm')}">
相反@kapep,我认为你应该使用的函数,而不是宏。 宏产生(文本)输出,而函数返回的值可以分配给变量,但也写入输出,因此使用函数更灵活。此外,应用函数的方法更接近于使用三元运算符,它也可用于${...}
表达式中,而不是作为指令使用。
例如,如果您需要有条件的链接目标多次,这将使意义将其分配到一个局部变量:
<#assign targetUrl=if(a, 'a.htm', 'b.htm')/>
<a href="${targetUrl}">link 1</a>
...
<a href="${targetUrl}">link 2</a>
使用功能,而不是宏观的,@ kapep的例子会是什么样子这个:
<!-- `else` is optional -->
${if(someBoolean, "someBoolean is true")}
<!-- expressions -->
${if(someBoolean||otherBoolean, "hello,"+user.name, 1+2+3)}
<!-- with parameter names: not possible with functions,
but also not really helpful -->
<!-- first in list? -->
<#list seq as x>
${if(x_index==0, "first", "not first")}
<#list>
3
从FreeMarker 2.3.23开始,你可以写a?then('a.htm', 'b.htm')
。 condition?then(whenTrue, whenFalse)
优于condition?string(whenTrue, whenFalse)
的优点是它适用于非字符串whenTrue
和whenFalse
,并且它仅评估whenTrue
和whenFalse
表达式(无论哪个分支被选中)之一。
相关问题
- 1. &&使用三元运算符
- 2. 使用三元运算符
- 3. 使用在三元运算符PHP
- 4. 在三元运算符内使用
- 5. 使用三元运算符,而在Perl
- 6. 三元运算符
- 7. 三元运算符用法?
- 8. 三元运算符用法
- 9. 三元运算符在foreach
- 10. 使用三元运算符分配?
- 11. 使用三元逻辑运算符“?:”
- 12. 使用C#三元运算符
- 13. java - 使用三元运算符
- 14. 使用三元运算符时出错
- 15. 使用Javascript的三元运算符
- 16. 如果使用三元运算符 - Verilog
- 17. 如何在字符串中使用运算符三元组?
- 18. 在变量字符串中使用三元运算符
- 19. 在handlebars.js中有三元运算符吗?
- 20. 三元运算符在php中?
- 21. 三元运算符作为C宏中三元运算符的操作数
- 22. 执行三元运算符
- 23. 关于三元运算符..!
- 24. C三元运算符
- 25. 替代三元运算符
- 26. Ruby三元运算符
- 27. java三元运算符
- 28. 三元运算符C
- 29. 三元运算符连接
- 30. 三元运算符问题
尝试var url =(a?a.htm:b.htm).............. –
正如下面所说的,你可以使用'?string',但是'a'的值究竟是什么?你想测试它是否存在,或者它是否为布尔“真”? – ddekany