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

Phi*_*hil 9 coldfusion

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

<cfset ListAppend(list, item)>
Run Code Online (Sandbox Code Playgroud)

list =''

<cfset ArrayAppend(array, item)>
Run Code Online (Sandbox Code Playgroud)

array [1] = item

<cfset StructInsert(struct, 'key', item)>
Run Code Online (Sandbox Code Playgroud)

struct.key = item

Lei*_*igh 10

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


Jas*_*ean 5

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

<cfset newList = listAppend(oldList, "New Value") />
Run Code Online (Sandbox Code Playgroud)