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



我使用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

我首先想到的是——如何计算子数据存储中列出的数字?

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

在你的例子中还有一个令人困惑的巧合。如果要将somethingMissing!发送到TW,则nums的第一个元素将是一个空字符串,这是expression!操作的结果。因为+被重载,既可以作为加法,也可以作为字符串串联,所以sum += num不会失败,相反,它会进行字符串串联。因此,首先它将sum转换为字符串"0",然后将空字符串附加到它。因此,您最终得到返回值"0",一个字符串,当它打印出来时,看起来就像数字0。但它并不是一个真正的0数字。

所以,只要使用<#function TW nums>,它就会按预期工作。如果您想传递一个文字列表,那么您可以编写TW([10, 20])。但我想通常您不想将预定义的列表传递给TW,因此额外的[]并不是什么大不了的。

最新更新