我可以在ColdFusion中通过引用传递一个简单的值吗?

我可以在ColdFusion中通过引用传递一个简单的值吗?,coldfusion,pass-by-reference,Coldfusion,Pass By Reference,默认情况下,ColdFusion按值将简单类型(如数字、字符串和GUID)传递给函数。我想通过引用传递一个简单的类型 我目前正在将一个简单的值包装到一个结构中(它们通过引用传递)。这解决了我的问题,但非常难看: <!--- TheFunctionName----> <cffunction name="TheFunctionName"> <cfargument name="OutVariable" type="struct"> <cfs

默认情况下,ColdFusion按值将简单类型(如数字、字符串和GUID)传递给函数。我想通过引用传递一个简单的类型

我目前正在将一个简单的值包装到一个结构中(它们通过引用传递)。这解决了我的问题,但非常难看:

<!--- TheFunctionName---->
<cffunction name="TheFunctionName">
     <cfargument name="OutVariable" type="struct">
     <cfset OutVariable.ID = 5>
</cffunction>

<cfset OutVariable=StructNew()>
<cfset TheFunctionName(OutVariable)>

<!--- I want this to output 5--->
<cfoutput>#OutVariable.ID#</cfoutput>

#OutVariable.ID#
我宁愿这样:

<!--- TheFunctionName---->
<cffunction name="TheFunctionName">
     <cfargument name="OutVariable" passbyref="true">
     <cfset OutVariable = 5>
</cffunction>

<cfset TheFunctionName(OutVariable)>

<!--- I want this to output 5--->
<cfoutput>#OutVariable#</cfoutput>

#外变量#

好吧,在ColdFusion中没有方法通过引用传递简单的值。我能想到的唯一解决方法就是您已经在使用的方法

相反,我建议您尝试重新构建您的程序,使其与语言的纹理一起工作。如果只有一个简单的值需要“修改”,您可以让函数返回新值,并像以下那样调用它:

<cfset SomeVar = TheFunctionName(SomeVar)>


在修改多个值的情况下,后退一步,考虑是否有可能将这些多个值捆绑到CFC中,使您的mutator函数成为CFC的方法。无论如何,这可能是一个更清晰、更易于维护的解决方案。

您可以将函数内外使用的变量安排在两个代码区域中都存在的范围内。例如,如果将变量放入“会话”或“请求”范围,则可以从函数中访问它。所做的改变将持续下去

请注意,在执行此操作时,实际上并不是将变量“传递”给函数。该函数只是假设变量存在或创建它,具体取决于您对它的编码方式

<cffunction name="TheFunctionName">
     <cfset Request.StrVar = "inside function<br />" />
</cffunction>

<cfscript>
    Request.StrVar = "outside function<br />";
    WriteOutput(Request.StrVar);
    TheFunctionName();
    WriteOutput(Request.StrVar);
</cfscript>

Request.StrVar=“外部功能
”; 写输出(Request.StrVar); 函数名(); 写输出(Request.StrVar);

如果对调用页在需要时提前声明变量有任何疑问,您必须对标记或函数进行一些腿部工作。

如果您:

  • 在CFC中声明函数
  • 使用
  • 您可以指定参数“returnvariable”,然后根据需要输出该变量

    <cfinvoke component="this" method="TheFunctionName" returnvariable="blah">
         <cfinvokeargument name="data" value="whatever" type="string">
    
         <cfreturn data>
    </cfinvoke>
    
    <cfdump var="#blah#">
    
    
    
    如果你用cfscript写所有东西,那么我会同意Fish所说的