2011-12-09 62 views
9

我只花了將近一個小時的時間,試圖找出總是返回一個空字符串的問題。我使用ListAppend就像使用ArrayAppend或StructInsert一樣,但顯然ListAppend的工作方式不同。如果有的話,ListAppend的工作與其他一切工作有什麼不同?爲什麼ListAppend是非破壞性的,而ArrayAppend和StructInsert都具有破壞性?

<cfset ListAppend(list, item)> 

列表= ''

<cfset ArrayAppend(array, item)> 

陣列[1] =項

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

struct.key =項

+0

昨天我也有過同樣的經歷和問題。 –

+0

可能的重複[爲什麼arrayAppend返回true和listAppend返回列表?](http://stackoverflow.com/questions/1138709/why-does-arrayappend-return-true-and-listappend-return-the-list) –

回答

10

可能是因爲列表只是一個大的String。與數組和結構不同,字符串是immutable,這意味着它們不能更改。要「附加」一個新值,你需要創建一個全新的String。數組和結構是可變的。所以你可以修改它們「就地」。

+0

昨天我有這個問題。感謝這樣一個明確的答案。 –

5

在ColdFusion的解釋只是字符串和在ColdFusion的串(和Java)是不可變的。他們不能改變。所以ListAppend()必須返回一個帶有值的新字符串,而不是修改現有的字符串。

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