我正在尝试从另一个变量中分配变量。我的代码看起来像这样
<#macro ctglink c rhs x y z m e b>
<#assign ctg>
<#if ctgroutes["${y}..${x}-${m}"]??>ctgroutes['${y}..${x}-${m}']
<#elseif ctgroutes["${x}..${y}-${m}"]??>ctgroutes['${x}..${y}-${m}']
<#else>{}</#if>
</#assign>
但是,这个ctg
变量只评估ctgroutes['227..257-TPPMD04X02']
它实际上没有评估字符串本身。
我已经尝试了?eval
和?interpret
以及其他一些非常讨厌的东西来让它发挥作用,不行。甚至{}
也是一个字符串
基本上,我需要assign函数像旧的PHP eval()
函数一样工作。我正在尝试访问Map中的值,这些值的键是从数据的状态派生出来的,所以我没有看到任何简单的方法来查询我的Map而不评估键。
更新
elseif
包含在那里<#assign ctg = ctgroutes["${y}..${x}-${m}"]!ctgroutes["${x}..${y}-${m}"]>
,但我收到以下错误:引起:freemarker.core.InvalidReferenceException:以下内容已评估为null或缺失: ==&GT; ctgroutes![&#34; $ {Y} .. $ {X} - $ {米}&#34;] ctgroutes [&#34; $ {X} .. $ {Y} - $ {米}&# 34;] [在模板&#34; RouteCompare-WptTable.ftlh&#34;第5栏第24栏
我希望null
结果只返回一张空地图,但这似乎不可能:
Caused by: java.lang.RuntimeException: freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:
==> ctgroutes["${y}..${x}-${m}"]!ctgroutes["${x}..${y}-${m}"] [in template "RouteCompare-WptTable.ftlh" at line 5, column 24]
所以基本上,我的目标是我需要分配一个可以取3个值中的1个的变量:
最好的方法是什么?
答案 0 :(得分:1)
如果我很清楚你想要实现的目标,你可以这样写:
<#assign ctg = ctgroutes["${y}..${x}-${m}"]!ctgroutes["${x}..${y}-${m}"]!{}>
另请注意,<#assign target>...</#assign>
用于将两个标记之间打印的输出捕获到target
变量中(而不是实际打印它)。因此target
将始终存储字符串或标记值。 FreeMarker标签和${}
之外的东西也只是静态文本,不会被解析。所以,天真但有效的方法就是使用#if
/ #elseif
/ #else
并在每个内部都有一个单独的#assign ctg = ...
,但你可以使用!
运算符,如图所示。