2

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関数を呼び出し、テンプレートに値を返そうとしています。文字列引数は、囲んでいるスコープの属性にアクセスできる式です。

4

1 に答える 1

1

(...)テンプレートの前後に「to string」演算子を使用できます。

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