Почему ListAppend не деструктивен, а ArrayAppend и StructInsert являются деструктивными? - PullRequest
9 голосов
/ 09 декабря 2011

Я потратил почти час, пытаясь выяснить проблему с наличием списка, который всегда возвращал бы пустую строку. Я использовал ListAppend точно так же, как один использует ArrayAppend или StructInsert, но, очевидно, ListAppend работает по-другому. В чем, если таковые имеются, причина того, что ListAppend работает иначе, чем все остальное?

<cfset ListAppend(list, item)>

list = ''

<cfset ArrayAppend(array, item)>

массив [1] = элемент

<cfset StructInsert(struct, 'key', item)>

struct.key = item

Ответы [ 2 ]

10 голосов
/ 09 декабря 2011

Возможно, потому что список - это просто большая строка .В отличие от массивов и структур, строки неизменны , что означает, что они не могут быть изменены.Чтобы «добавить» новое значение, вам нужно создать совершенно новую строку.Массивы и структуры изменчивы.Таким образом, вы можете изменить их "на месте".

5 голосов
/ 09 декабря 2011

Списки в ColdFusion являются просто строками, а строки в ColdFusion (и Java) являются неизменяемыми.Они не могут быть изменены.Поэтому ListAppend () должен возвращать новую строку со значением вместо изменения существующей строки.

<cfset newList = listAppend(oldList, "New Value") />
...