您可以在第一个或第二个指定的代码块取消注释的情况下运行this cftry gist以查看问题。
<cffunction name="alpha" returntype="boolean">
<cfargument name="boo" type="boolean" />
<cfreturn arguments.boo />
</cffunction>
<cffunction name="beta">
<cfset var temp = {} />
<cftry>
<cfset temp.userID = 1 />
<!--- This way throws an *unhandled* exception --->
<!--- --->
<cfif alpha(structAppend({userID = temp.userID}, foo))>
<cfdump var="It worked" />
</cfif>
<!--- This way works as expected --->
<!---
<cfset temp.args = {userID = temp.userID} />
<cfif alpha(structAppend(temp.args, foo))>
<cfdump var="It worked" />
</cfif>
--->
<cfcatch>
<cfdump var="#cfcatch.message#" />
</cfcatch>
</cftry>
</cffunction>
我知道struct literal notation {}
有时会在我的调试器中显示通常命名的结构,但是为什么要分配这种语法创建的结构会使结构创建发生在与#&#不同的时间。 39;未分配?
如果我调试,我可以在我设置temp.userID = 1
的行上设置一个断点,它会跳过它。此外,异常是在try / catch中包含的行上抛出,但它没有捕获它。
我在JavaScript中知道&#39;吊装&#39;的概念。我只能假设在某些(但不是全部!)情况下CF正在做类似于struct literals的事情。
这是一个错误,还是已知的CF行为?