Coldfusion 可变内存空间共享?
在循环中,以下内容将Coldfusion 可变内存空间共享?,coldfusion,coldfusion-9,Coldfusion,Coldfusion 9,在循环中,以下内容将par.fval添加到this.filters以及par.T开头的任何内容: <cfset par.T = this.filters /> <cfset ArrayAppend(par.T[this.name],par.fval)/> 将为每个迭代转储this.filters,并附加最后一个值par.fval 我试图弄明白为什么我会假设ColdFusion会作为一个全新的变量覆盖par.T 缩小范围以删除逻辑: filtersA: <cfdu
par.fval
添加到this.filters
以及par.T
开头的任何内容:
<cfset par.T = this.filters />
<cfset ArrayAppend(par.T[this.name],par.fval)/>
将为每个迭代转储this.filters
,并附加最后一个值par.fval
我试图弄明白为什么我会假设ColdFusion会作为一个全新的变量覆盖par.T
缩小范围以删除逻辑:
filtersA:
<cfdump var="#this.filters#">
<cfset par.T = #this.filters# />
<cfset ArrayAppend(par.T[this.name],par.fval)/>
filtersB:
<cfdump var="#this.filters#">
filtersA:
过滤器B:
将显示
par.fval
已附加到该append语句的this.filters
。因此,无论出于何种原因,par.T
似乎没有成为它自己的变量,而是对this
的内存空间的引用。很难理解您的代码示例,但在CF:struct和object是按引用传递的,而数组和简单值是按值传递的。不确定您的意思是什么“跨越那个append语句”。你能提供更多的上下文吗?什么是“filtersA”和“filtersB”“-组件?它们是如何使用的?有没有涉及到共同的范围?是的,不得不说我无法理解问题的大部分叙述。但我认为@Henry猜对了。该代码在cfc中。在某些时候,我使用一个单独的函数Bu建dLink,返回基于Struts PAR.过滤器的链接。其中一个可用选项在结构中的一个数组筛选器上追加额外数据。问题是我需要原始数组保持不变,同时发送一个与原始结构等效的参数,并将新数据附加到该数组中。当我在cfc中创建一个与结构等效的新局部变量并将数据附加到此新结构中的适当数组时,数据也会附加到原始结构中。您是否尝试过使用duplicate()
制作原始结构的深度副本?下一次,发布一篇演示问题的文章将帮助我们更快地找到问题的根源。
filtersA:
<cfdump var="#this.filters#">
<cfset par.T = #this.filters# />
<cfset ArrayAppend(par.T[this.name],par.fval)/>
filtersB:
<cfdump var="#this.filters#">