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