Если вы объявите TW
с параметром nums...
и передадите список в TW
, это будет просто первый элемент внутри nums
. Это потому, что у параметров нет объявленного типа во FreeMarker, поэтому не совсем понятно, что вы имели в виду.
В вашем примере есть еще одно запутанное совпадение. Если вы отправляете somethingMissing!
на TW
, то первый элемент nums
будет пустой строкой, которая является результатом операции expression!
. Поскольку +
перегружен для работы как в качестве дополнения, так и в качестве объединения строк, sum += num
не даст сбоя, вместо этого он выполнит объединение строк. Сначала он преобразует sum
в строку "0"
, а затем добавляет к ней пустую строку. Таким образом, вы получите возвращаемое значение "0"
, строку, которая при печати выглядит как число 0
. Но на самом деле это не 0
число.
Итак, просто используйте <#function TW nums>
, тогда оно будет работать как положено. Если вы хотите передать буквальный список, вы можете написать TW([10, 20])
тогда. Но я думаю, что обычно вы не хотите передавать предопределенный список на TW
, и поэтому дополнительные []
не имеют большого значения.