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

时间:2011-12-13 00:24:21

标签: 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>

1 个答案:

答案 0 :(得分:2)

嗯:你在这里回答了你自己的问题:它发生了,因为它是一个错误。虫子发生了。你花了很多时间向Adobe提出建议,这很好。

至于解决方法,这两种变体可以正常工作:

<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>

或者:

<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>

在Adobe解决问题之前,你只需做类似的事情: - (