2

我有一种情况,我需要在具有格式的对象属性列表上使用包装和锚定功能。

我可以在字符串模板中创建一个列表,然后去掉空值,如果它们只是直接的属性访问。但是我希望能够有条件地格式化一些属性。例如,给定模板。

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 的值为空,它将产生

2 Tasty Chicken
  Total VAT £20
  1

因为 strip 删除了空值。但是,如果我通过 Vat 的空值的第一个对象,那么我得到

2 Tasty Chicken
  £100

  1

因为模板总是解析为空字符串。那么有什么办法可以将空字符串转换为 null 吗?

此处明显的解决方法 StringTemplate 3: how to filter a list? 不起作用,因为它会在模板上引发编译异常。具体来说,它不喜欢“无”作为地图的价值。如果我可以像在那篇文章中那样将一个值显式映射为 null,那么我将拥有我需要的东西。

4

0 回答 0