在 ColdFusion UDF 中,有没有办法从父函数范围引用变量?
In ColdFusion UDFs is there a way to reference a variable from the parent function scope?
如果您遇到一个 UDF 在其中调用另一个 UDF 的情况,是否可以在不将其作为参数传递的情况下引用父级的本地范围?我的直觉告诉我,这是不可能的,因为函数的局部范围 应该 被设计隔离。
例如:
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02() />
</cffunction>
<cffunction name="function02">
<cfdump var="#fruit#" /> <!--- can I reference fruit? --->
</cffunction>
我知道如何让 function02 访问父 UDF 的局部范围变量的唯一方法是将其作为参数传递。当然,我想您也可以使用 REQUEST、FORM、URL、SESSION 和 APPLICATION 范围。
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02(fruit) />
</cffunction>
<cffunction name="function02">
<cfargument name="fruit" />
<cfdump var="#fruit#" />
</cffunction>
通过在fruit
前面声明var
,它只对本地范围(函数内)可用。
尝试:
<cffunction name="function01">
<cfset fruit = "apple" />
<cfset function02() />
</cffunction>
<cffunction name="function02">
<cfdump var="#fruit#" /> <!--- can I reference fruit? --->
</cffunction>
这可能有效,但这不是 "clean" 处理此问题的方法,最好使用参数
根据每个人的评论,正确答案是您不能从子函数引用局部作用域变量。传递引用的唯一方法是将变量作为参数传递给子函数或将变量存储在不同的范围内(例如 VARIABLES、FORM、URL、REQUEST、SESSION、APPLICATION、服务器等...)
首选方法是将变量作为参数传递给子函数:
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02(fruit) />
</cffunction>
<cffunction name="function02">
<cfargument name="fruit" />
<cfdump var="#fruit#" />
</cffunction>
如果您遇到一个 UDF 在其中调用另一个 UDF 的情况,是否可以在不将其作为参数传递的情况下引用父级的本地范围?我的直觉告诉我,这是不可能的,因为函数的局部范围 应该 被设计隔离。
例如:
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02() />
</cffunction>
<cffunction name="function02">
<cfdump var="#fruit#" /> <!--- can I reference fruit? --->
</cffunction>
我知道如何让 function02 访问父 UDF 的局部范围变量的唯一方法是将其作为参数传递。当然,我想您也可以使用 REQUEST、FORM、URL、SESSION 和 APPLICATION 范围。
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02(fruit) />
</cffunction>
<cffunction name="function02">
<cfargument name="fruit" />
<cfdump var="#fruit#" />
</cffunction>
通过在fruit
前面声明var
,它只对本地范围(函数内)可用。
尝试:
<cffunction name="function01">
<cfset fruit = "apple" />
<cfset function02() />
</cffunction>
<cffunction name="function02">
<cfdump var="#fruit#" /> <!--- can I reference fruit? --->
</cffunction>
这可能有效,但这不是 "clean" 处理此问题的方法,最好使用参数
根据每个人的评论,正确答案是您不能从子函数引用局部作用域变量。传递引用的唯一方法是将变量作为参数传递给子函数或将变量存储在不同的范围内(例如 VARIABLES、FORM、URL、REQUEST、SESSION、APPLICATION、服务器等...)
首选方法是将变量作为参数传递给子函数:
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02(fruit) />
</cffunction>
<cffunction name="function02">
<cfargument name="fruit" />
<cfdump var="#fruit#" />
</cffunction>