ArrayAppend 返回布尔值而不是数组

ArrayAppend returning boolean instead of array

好吧,我已经为此苦苦挣扎了一段时间,我想我会回到基础并尝试找出我的错误,因为我在这里遇到的错误与我在生产线上遇到的错误相同。

这是我的代码:

<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

错误正是它所说的。变量 session.cart 不是数组。它是一个布尔值。如果您阅读 ArrayAppend documentation,它会解释原因。该函数就地修改数组和returns一个布尔值:

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 支持的 shorthand 语法大大简化代码,即 {} - 新结构和 [] - 新数组.要创建一个新数组:

<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" }
                  )>