ArrayAppend返回布尔值而不是数组

时间:2016-08-17 14:43:32

标签: data-structures coldfusion coldfusion-11

好的,我一直在努力解决这个问题,我想我会回到基础并尝试弄清楚我的错误,因为我在这里得到了同样的错误。

这是我的代码:

<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#"> 

这是我的错误:

  

类java.lang.Boolean类型的对象不能用作数组

1 个答案:

答案 0 :(得分:4)

错误意味着它的内容。变量session.cart不是数组。它是一个布尔值。如果您阅读ArrayAppend documentation,它就会解释原因。该函数修改了数组并返回一个布尔值:

  成功完成后,

返回为真。

通过在此处捕获结果,您实际上将购物车价值设置为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" }
                  )>