奇怪的错误与命名参数和函数调用中的隐式结构创建

Nuc*_*eon 8 coldfusion coldfusion-9

这是我最近在CF9中遇到的一个非常奇怪的错误.任何人都知道它为什么会发生,如果我做错了什么,或者有可用的修补程序.请查看以下代码.我们取一个字符串,添加一个A,添加一个B,然后尝试添加一个C ......但我们得到的结果是"ababc".预期的结果是"abc".只有在参数传递和&=函数调用中的运算符中执行命名参数和隐式结构时,才会出现该错误.如果不存在这3个案例中的任何一个,则不会发生错误.有什么想法吗?

<cffunction name="test">
    <cfargument name="widget">

    <cfset var locals = StructNew()>

    <cfreturn arguments.widget.value>
</cffunction>

<cfset return = "">
<cfset return &= "a">
<cfset return &= "b">
<cfset return &= test(widget = { value = "c" })>
<cfoutput>#return#</cfoutput>
Run Code Online (Sandbox Code Playgroud)

Ada*_*ron 2

好吧:你在这里已经回答了你自己的问题:它发生是因为它是一个错误。错误发生。很高兴您花时间向 Adob​​e 提供有关此事的建议。

至于解决方法,这两种变体工作得很好:

<cfset return = "">
<cfset return &= "a">
<cfset return &= "b">
<cfset st = { value = "c" }><!--- refactor where the struct is created --->
<cfset return &= test(widget = st)>
<cfoutput>#return#</cfoutput>
Run Code Online (Sandbox Code Playgroud)

或者:

<cfset return = "">
<cfset return &= "a">
<cfset return &= "b">
<cfset temp = test(widget = { value = "c" })><!--- refactor where the function is called --->
<cfset return &= temp>
<cfoutput>#return#</cfoutput>
Run Code Online (Sandbox Code Playgroud)

你只需要做类似的事情,直到 Adob​​e 开始修复它:-(