structDelete不影响浅拷贝?

时间:2010-06-15 02:22:12

标签: coldfusion

我正在玩onError所以我尝试使用大型xml文档对象创建错误。

<cfset XMLByRef = variables.parsedXML.XMLRootElement.XMLChildElement>
<cfset structDelete(variables.parsedXML, "XMLRootElement")>
<cfset startXMLShortLoop = getTickCount()>
<cfloop from = "1" to = "#arrayLen(variables.XMLByRef)#" index = "variables.i">
  <cfoutput>#variables.XMLByRef[variables.i].id.xmltext#</cfoutput><br />
</cfloop>
<cfset stopXMLShortLoop = getTickCount()>

我预计会收到错误,因为我删除了我引用的结构。

来自LiveDocs:

  

变量赋值 - 创建一个   附加的引用或别名   结构体。对数据的任何更改   使用一个变量名称更改   您使用的访问结构   其他变量名称。这种技术是   在您想要添加本地时很有用   变量到另一个范围或其他   不用改变变量的范围   从中删除变量   原始范围。

而是我得到了

  

580df1de-3362-ca9b-b287-47795b6cdc17

     

25a00498-0f68-6f04-a981-56853c0844ed

     

...   ...   ...

     

db49ed8a-0ba6-8644-124a-6d6ebda3aa52

     

57e57e28-e044-6119-afe2-aebffb549342

     

在297毫秒内循环12805次

<cfdump var = "#variables#">

显示结构中没有任何内容,只是使用XMLRootElement的值解析了XMLXRoot.xmlName。 我也试过

<cfset structDelete(variables.parsedXML.XMLRootElement, "XMLChildElement")>

以及两者的structClear。

有关从xml文档对象中删除的详细信息。 http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-78e3.html

有人可以解释我错误的逻辑吗?感谢。

1 个答案:

答案 0 :(得分:2)

XML数据类型是结构和数组的组合。与结构不同,CF中的数组将通过值传递,而不是通过引用传递,可能就是您所看到的。

http://www.coldfusionjedi.com/index.cfm/2009/5/1/ColdFusion-and-Pass-by-Reference-versus-Value