2

書式設定のあるオブジェクト属性のリストで、ラッピングおよびアンカー機能を利用する必要がある状況があります。

文字列テンプレートでリストを作成し、直接プロパティにアクセスするだけの場合は null 値を取り除くことができます。ただし、一部の属性を条件付きでフォーマットできるようにしたいと考えています。たとえば、テンプレートが与えられます。

PrintItem(item) ::= <<
<item.Count> <strip([item.Name, item.Value, PrintVat(item.Vat), item.Id]); separator=""\n"", anchor>
>>
PrintVat(vat) ::= "<if(vat)>Total VAT <vat><endif>"

および値を持つオブジェクト

Count = 2
Name  = Tasty Chicken
Value = £100
Vat   = £20
Id    = 1

生み出すだろう

2 Tasty Chicken
  £100
  Total VAT £20
  1

同じオブジェクトを渡したが、Value に null 値を指定すると、生成されます

2 Tasty Chicken
  Total VAT £20
  1

ストリップはヌルを削除するためです。ただし、Vat に null 値を持つ最初のオブジェクトを渡すと、

2 Tasty Chicken
  £100

  1

テンプレートは常に空の文字列に解決されるためです。空の文字列を null に変換する回避策はありますか?

ここでの明らかな回避策 StringTemplate 3: how to filter a list? テンプレートでコンパイル例外をスローするため、機能しません。具体的には、マップの値として「何もない」ことは好きではありません。その投稿のように値を明示的に null にマップできれば、必要なものが得られます。

4

0 に答える 0