Странная ошибка с именованными аргументами и неявным созданием структуры в вызове функции - PullRequest
8 голосов
/ 13 декабря 2011

Вот действительно странная ошибка, с которой я недавно столкнулся в 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 Ответ

2 голосов
/ 13 декабря 2011

Хорошо: вы как бы ответили на свой вопрос здесь: это происходит из-за ошибки. Баги случаются. Хорошо, что вы нашли время, чтобы сообщить об этом 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 не придет в себя, чтобы исправить это: - (

...