StringTemplate v3 では、実際のハッシュマップ ルックアップを行う代わりに、提供されたキーで関数を呼び出し、関数の結果を返すカスタム Java 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関数を呼び出し、テンプレートに値を返そうとしています。文字列引数は、囲んでいるスコープの属性にアクセスできる式です。