为什么ListAppend是非破坏性的,而ArrayAppend和StructInsert都具有破坏性?

时间:2011-12-09 18:10:15

标签: coldfusion

我花了差不多一个小时试图找出一个总是返回一个空字符串的列表的问题。我正在使用ListAppend就像使用ArrayAppend或StructInsert,但显然ListAppend的工作方式不同。如果有的话,ListAppend与其他所有内容的工作方式不同的原因是什么?

<cfset ListAppend(list, item)>

list =''

<cfset ArrayAppend(array, item)>

array [1] = item

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

struct.key = item

2 个答案:

答案 0 :(得分:10)

可能是因为列表只是一个很大的String。与数组和结构不同,字符串是immutable,这意味着它们无法更改。要“追加”新值,您需要创建一个全新的String。数组和结构是可变的。所以你可以“就地”修改它们。

答案 1 :(得分:5)

ColdFusion中的列表只是字符串,ColdFusion(和Java)中的字符串是不可变的。它们无法改变。因此ListAppend()必须返回带有值的新字符串,而不是修改现有字符串。

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