Coldfusion Structinsert正在覆盖原始插入值

Coldfusion Structinsert正在覆盖原始插入值,struct,coldfusion,cfml,Struct,Coldfusion,Cfml,我有以下代码 <cfset x = StructNew()> <cfset y = StructNew()> <cfset y.name = "1"> <cfset y.id = "2"> <cfset structInsert(x,"item1",y)> <cfdump var="#x#"> 然后我添加此代码以插入另一组数据 <cfset y.name = "3"> <cfset y.id = "

我有以下代码

<cfset x = StructNew()>
<cfset y = StructNew()>

<cfset y.name = "1">
<cfset y.id = "2">

<cfset structInsert(x,"item1",y)>

<cfdump var="#x#">
然后我添加此代码以插入另一组数据

<cfset y.name = "3">
<cfset y.id = "4">

<cfset structInsert(x,"item2",y)>

<cfdump var="#x#">

item1数据为什么会更改?

从技术上讲,structInsert不会覆盖值—您是—执行此操作时:

 <cfset y.name = "3">
 <cfset y.id = "4">

 <!--- show values before structInsert --->
 <cfdump var="#x#">
话虽如此,除非使用structInsert()有特定的原因,否则现在使用结构或点表示法更为标准:

 <cfset x.item1 = y> ... or
 <cfset x["item1"] = y>
。。。或者,如果需要单独附加结构,请使用:

<cfset x = {}>
<cfset x["item1"] = {"name": "1", "id": "2"}>
<cfset x["item2"] = {"name": "3", "id": "4"}>


谢谢你。我会考虑所有这些。我现在用的是复制件。这样行,但是。。除非您确实需要复制结构中的所有键,否则创建一个新键会更简单。此外,使用
{}
比所有单独cfset的IMO:-)传递引用与传递值更流畅、更短,这始终是一个有趣的讨论。:-)
<cfset y = structNew()>
<cfset y.name = "3">
<cfset y.id = "4">
 <cfset x.item1 = y> ... or
 <cfset x["item1"] = y>
<cfset x = { "item1": {"name": "1", "id": "2"}
        , "item2": {"name": "3", "id": "4"}
       }>
<cfset x = {}>
<cfset x["item1"] = {"name": "1", "id": "2"}>
<cfset x["item2"] = {"name": "3", "id": "4"}>