在StringTemplate v3中,我们有一个自定义Java HashMap实现,它将调用提供的键上的函数并返回函数结果,而不是执行实际的hashmap查找。我们将这个HashMap的一个实例添加为stringtemplate的一个属性。这将允许我们在StringTemplate中编写自定义函数。我们称之为:
$myfunc.("argument")$
和
$somearray:{ v |
$myfunc.("value: " + v)$
}$
myfunc HashMap将获得String
类型的键在v4中不再可能与+进行连接,建议的更改是将“value”+ v转换为匿名模板:
$somearray:{ v |
$myfunc.({value: $v$})$
}$
在这种情况下,一个ST对象被传递给HashMap,我可以在其上调用'render()'来生成我通常会得到的文本。但是:属性'v'不再从周围传递范围。如果ST对象找到周围的范围(ST),我怎么能复制属性并使其工作?
我真的不想将我的代码更改为
$somearray:{ v |
$myfunc.((v:{ v | value: $v$}))$
}$
因为我们有一个很大的代码库,这是一个非常具有破坏性的变化。
还有其他方法可以实现我想要的东西吗?我真的试图用字符串参数调用Java函数并让它返回一个值给模板,字符串参数是一个表达式,可以访问封闭范围的属性。
答案 0 :(得分:1)
您可以在模板周围使用“to string”运算符(...)
:
$somearray:{ v |
$myfunc.(({value: $v$}))$
}$