2011-12-09 17 views
9

Neredeyse her zaman boş bir dize döndüren bir listeye sahip olmakla ilgili bir sorunu çözmeye çalışmak için neredeyse bir saat harcadım. ListAppend'i bir ArrayAppend veya StructInsert kullanıyor gibi kullanıyordum, ancak görünüşe göre ListAppend farklı çalışıyor. Varsa, ListAppend'in diğer her şeyden farklı olarak çalışmasının arkasında yatan sebep nedir? ColdFusion'dakiArrayAppend ve StructInsert ikisi de yıkıcı iken, ListAppend neden yıkıcı değil?

<cfset ListAppend(list, item)> 

liste = ''

<cfset ArrayAppend(array, item)> 

dizi [1] = öğe

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

struct.key = madde

+0

Aynı deneyime ve dün soruyu sordum. –

+0

olası yinelenen [Neden arrayAppend true döndürür ve listeyi listeye döndürür?] (Http://stackoverflow.com/questions/1138709/why-does-arrayappend-return-true-and-listappend-return-the-list) –

cevap

10

Muhtemelen bir liste büyük bir String olduğu için. Diziler ve yapılardan farklı olarak, Dizeler immutable olup, değiştirilemezler. Yeni bir değeri "eklemek" için, tamamen yeni bir Dize oluşturmanız gerekir. Diziler ve yapılar değişebilir. Böylece onları "yerinde" değiştirebilirsiniz.

+0

Dün bu soruyu yaşadım. Böyle net bir cevap için teşekkürler. –

5

Listeler sadece Dizeleri ve ColdFusion dizeleri vardır (ve Java) değişmezdir. Değiştirilemezler. ListAppend(), varolan dizeyi değiştirmek yerine yeni bir dize değeriyle döndürmelidir.

İlgili konular