2016-08-17 3 views
2

OK Я боролся с этим на некоторое время, и я решил, что вернусь к основам и попытаюсь выяснить свою ошибку, так как я получаю ту же ошибку здесь, что и я.ArrayAppend возвращает boolean вместо массива

Вот мой код:

<cfparam name="session.cart" default="arrayNew(1)"> 
<cfset session.cart = arrayAppend(session.cart,structNew())> 

<cfset thisCartItem = arraylen(session.cart)> 

<cfset session.cart[thisCartItem].itemID = "X"> 
<cfset session.cart[thisCartItem].quantity = "X"> 
<cfset session.cart[thisCartItem].itemName = "X"> 

<cfdump var="#session.cart#"> 

Вот моя ошибка:

Object of type class java.lang.Boolean cannot be used as an array

+3

ошибка означает именно то, что он говорит :) 'session.cart' не является массивом , 'arrayAppend' возвращает логическое значение, * не * объект массива. – Leigh

+0

Как я могу настроить массив, отличный от того, как у меня есть? –

+0

См. Мой ответ ниже. Также обратите внимание на комментарии об использовании знаков фунта в 'cfparam'. Без них код не создает массив. Он просто устанавливает, что переменная равна буквальным символам «arrayNew (1)». – Leigh

ответ

4

ошибка означает именно то, что он говорит. Переменная session.cart не является массивом. Это логическое значение. Если вы читаете ArrayAppend documentation, это объясняет, почему. Функция изменяет массив на месте и возвращает логическое значение:

Returns True, on successful completion.

Захватив результат здесь, вы на самом деле установки значения корзины для true/false:

<!--- Note the addition of the pound signs in the CFPARAM ---> 
<cfparam name="session.cart" default="#arrayNew(1)#"> 
<cfset session.cart = arrayAppend(session.cart, structNew())> 

Сказав это, вы могли бы упростить код много, используя сокращенный синтаксис, поддерживаемый во всех последних версиях CF, т.е. {} - новая структура и [] - новый массив. Чтобы создать новый массив:

<cfset session.cart = []> 

Чтобы добавить одну или несколько структур к концу этого массива:

<!--- append first structure to array ---> 
<cfset ArrayAppend(session.cart 
         , { itemID = "X", quantity = "X", itemName = "X" } 
       )> 

<!--- append second structure to array ---> 
<cfset ArrayAppend(session.cart 
         , { itemID = "Y", quantity = "Y", itemName = "Y" } 
       )> 
+0

Я не работал со стенографией вообще и довольно новичок в CF вообще, спасибо за помощь. –

+0

Другим быстрым вопросом будет вопрос о том, как продолжить добавление к этому массиву. Если я запустил команду над ней, просто изменил структуру в первом массиве. –

+0

Также у вас есть ссылка, которая может научить меня немного больше о сокращении. Кажется, она намного более сжата и, возможно, немного легче, когда я получаю Это. –