2011-12-09 5 views
9

Po prostu spędziłem prawie godzinę próbując wymyślić problem z listą, która zawsze zwraca pusty ciąg znaków. Używałem ListAppend tak jak jeden używa ArrayAppend lub StructInsert, ale najwyraźniej ListAppend działa inaczej. Co, jeśli w ogóle, jest uzasadnienie, że ListAppend działa inaczej niż wszystko inne?Dlaczego ListAppend jest nieniszczący, a ArrayAppend i StructInsert są destrukcyjne?

<cfset ListAppend(list, item)> 

lista = ''

<cfset ArrayAppend(array, item)> 

array [1] = pozycja

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

struct.key = pozycja

+0

Wczoraj miałem takie samo doświadczenie i pytanie. –

+0

prawdopodobny duplikat [Dlaczego zwracane jest odwołanie do funkcji arrayAppend true, a listaAppend zwraca listę?] (Http://stackoverflow.com/questions/1138709/why-does-arrayappend-return-true-i-listappend-return-the-list) –

Odpowiedz

10

Prawdopodobnie dlatego, że lista jest po prostu duża String. W przeciwieństwie do tablic i struktur, ciągi znaków są immutable, co oznacza, że ​​nie można ich zmienić. Aby "dołączyć" nową wartość, musisz utworzyć całkowicie nowy Ciąg. Tablice i struktury są zmienne. Możesz więc modyfikować je "na miejscu".

+0

Miałem to pytanie wczoraj. Dzięki za tak jasną odpowiedź. –

5

list w ColdFusion są tylko ciągi i ciągi w ColdFusion (i Java) są niezmienne. Nie można ich zmienić. Tak więc ListAppend() musi zwracać nowy łańcuch z wartością zamiast modyfikować istniejący łańcuch.

<cfset newList = listAppend(oldList, "New Value") /> 
Powiązane problemy