如何计算列中的结果列表编号?

问题描述 投票:0回答:1

我正在使用SpreadsheetMapper工具,我想在列中计算结果列出的数字。

当我使用结果列表时,此代码不起作用。

<#function TW nums...>
  <#local sum = 0>
  <#list nums as num>
    <#local sum += num>
  </#list>
  <#if nums?size != 0>
    <#return sum >
  </#if>
</#function>
${TW(result['TotalWeightListResult']!)}

https://prnt.sc/r3h137

当我使用静态列出的号码时,此方法有效。

<#function TW nums...>
  <#local sum = 0>
  <#list nums as num>
    <#local sum += num>
  </#list>
  <#if nums?size != 0>
    <#return sum >
  </#if>
</#function>
${TW(10 20)}

参考-https://freemarker.apache.org/docs/ref_directive_function.html

java freemarker
1个回答
0
投票

如果使用TW参数声明nums...,并将列表传递给TW,则它将只是第一个元素inside nums。这是因为参数在FreeMarker中没有声明的类型,因此,您的意思并不明显。

您的示例中还有另一个令人困惑的巧合。如果将somethingMissing!发送到TW,则nums的第一个元素将是一个空字符串,这是expression!操作的结果。因为+被重载以作为加法和字符串连接工作,所以sum += num不会失败,而是先将sum转换为字符串"0",然后将空字符串附加到该字符串上。因此,您最终得到返回值"0",这是一个字符串,在打印时,它看起来就像数字0

因此,只需使用<#function TW nums>,它将按预期工作。如果要传递文字列表,则可以写TW([10, 20])。但我想通常您不想将预定义列表传递给TW,因此多余的[]没什么大不了的。

© www.soinside.com 2019 - 2024. All rights reserved.