在 ColdFusion UDF 中,有没有办法从父函数范围引用变量?
Posted
技术标签:
【中文标题】在 ColdFusion UDF 中,有没有办法从父函数范围引用变量?【英文标题】:In ColdFusion UDFs is there a way to reference a variable from the parent function scope? 【发布时间】:2017-01-19 19:18:53 【问题描述】:如果您遇到一个 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>
【问题讨论】:
使用参数似乎是正确的选择,你为什么不想那样做呢? 这更多是出于好奇。我知道使用var
字去掉。当然,这会改变问题,因为它不再是父级的本地范围。
我没有看到任何关于 this
标记而不是使其成为本地范围。然后,您可以在所需的两个函数中调用this.var
。
【参考方案1】:
通过在前面声明fruit
和var
,它只适用于本地范围(在函数内)。
尝试:
<cffunction name="function01">
<cfset fruit = "apple" />
<cfset function02() />
</cffunction>
<cffunction name="function02">
<cfdump var="#fruit#" /> <!--- can I reference fruit? --->
</cffunction>
这可能有效,但不是“干净”的处理方式,最好使用参数
【讨论】:
【参考方案2】:根据每个人的 cmets,正确答案是您不能从子函数中引用局部作用域变量。传递引用的唯一方法是将变量作为参数传递给子函数,或者将变量存储在不同的范围内(例如 VARIABLES、FORM、URL、REQUEST、SESSION、APPLICATION、SERVER 等。 ..)
首选方法是将变量作为参数传递给子函数:
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02(fruit) />
</cffunction>
<cffunction name="function02">
<cfargument name="fruit" />
<cfdump var="#fruit#" />
</cffunction>
【讨论】:
以上是关于在 ColdFusion UDF 中,有没有办法从父函数范围引用变量?的主要内容,如果未能解决你的问题,请参考以下文章
ESLint:我如何告诉eslint忽略coldfusion评论
如何在 ColdFusion 中获取计划任务列表和上次运行结果?
在 PySpark 中,有没有办法使用运行时给出的 Python 类的函数来动态注册 UDF? [复制]