2

在 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 函数并让它返回一个值给模板,字符串参数是一个可以访问封闭范围属性的表达式。

4

1 回答 1

1

(...)您可以在模板周围使用“to string”运算符:

$somearray:{ v |
  $myfunc.(({value: $v$}))$
}$
于 2014-02-08T21:00:49.887 回答