web-dev-qa-db-ja.com

シーケンスに値を追加しますか?

テンプレートにFreeMarker sequence を作成しました:

<#assign x = ["red", 16, "blue", "cyan"]>

シーケンスに値を追加するにはどうすればよいですか?

24
Vicky

xと新しい要素のみを含むシーケンスを連結して、新しいシーケンスを作成する必要があります。

<#assign x = x + [ "green" ] />
47
Laurent Pireyn

FreeMarkerは基本的に追記型言語です。配列やマップの変更など、データの操作を不可能にするために非常に努力しています。

ただし、これを回避するには、連結と再割り当てを行います。

<#assign my_array = [] />
<#list 1..10 as i>
  <#assign my_array = my_array + ["value " + i] />
</#list>

これにより、「値1」から「値10」までの配列が生成されます。これが洗練されていないように見える場合は、そのように意図されていたためです。 FreeMarkerのイデオロギーの観点から、配列などの構築を開始すると、テンプレート言語が行うべきことを超えて、モデル、コントローラー、ヘルパークラスなどがJavaコード。 FreeMarkerでの作業は、この視点から逸脱するほど激しくイライラする可能性があります。

http://freemarker.sourceforge.net/docs/app_faq.html#faq_modify_seq_and_map から:

FreeMarkesテンプレート言語は、シーケンス/ハッシュの変更をサポートしていません。データを計算するためではなく、すでに計算されたものを表示するためのものです。テンプレートはシンプルにしてください。しかし、それをあきらめないでください、あなたはいくつかのアドバイスとトリックを以下に見るでしょう。

Laurentの回答 は正しく、完全に受け入れ可能です。ただし、省略形を使用して値を追加することもできます。

<#assign x += ["green"]>

シーケンスは次のようになります。

Sequence (5)
  0 = "red" (String)
  1 = 16 (BigDecimal)
  2 = "blue" (String)
  3 = "cyan" (String)
  4 = "green" (String)
0
Ryan Payne