2012-06-25 1 views
4

함수 인자에서 객체 리터럴에서 CF의 로컬 범위를 사용할 때 이상한 동작이 나타납니다. 하지만 ... 루프 내부에서 실행되는 경우객체 리터럴 내 ColdFusion 로컬 범위

예 번호 :

<cffunction name="f"> 
    <cfoutput> 
     <cfset LOCAL.foo = 123 />  

     <!--- Works fine ---> 
     #serializeJSON({blah = LOCAL.foo})# 

     <!--- Works fine ---> 
     <cfloop from=1 to=1 index="i"> 
      <cfset bar = {blah = LOCAL.foo} /> 
      #serializeJSON(bar)# 
     </cfloop> 

     <!--- Element FOO is undefined in LOCAL ---> 
     <cfloop from=1 to=1 index="i"> 
      #serializeJSON({blah = LOCAL.foo})# 
     </cfloop> 
    </cfoutput> 
</cffunction> 


<cfset f() /> 

PS : serializeJSON() 단지 예시적인 목적이다. 이것은 인수 중 하나가 구조체 인 곳에서 테스트 한 모든 함수에서 발생합니다.

+0

그래서 "이상한 행동"이란 무엇입니까? –

+0

"FOO 요소가 로컬에서 정의되지 않았습니다." – stubotnik

답변

2

Railo에서 잘 작동합니다.

local 범위 대신 다른 컨테이너를 사용하는 경우에도 차이가 없으며 cftry으로이를 포착하는 것도 불가능합니다.

당신은 루프 내에서 단지 로컬 범위를 직렬화하는 경우 :

<cfloop from=1 to=1 index="i"> 
    #serializeJSON(local)# 
</cfloop> 

결과는 다음과 같습니다

{"ARGUMENTS":{},"___IMPLICITARRYSTRUCTVAR1":{"BLAH":123},"___IMPLICITARRYSTRUCTVAR0":{"BLAH":123},"FOO":123} 

버그처럼 보인다. 마음 filing?

+0

동의. 버그 기록 : https://bugbase.adobe.com/index.cfm?event=bug&id=3223465 – stubotnik

+0

그리고 도움에 감사드립니다! – stubotnik

1

LOCAL은 함수 내에서만 사용되는 범위입니다. 함수 외부에서 LOCAL 범위 변수를 만들려고하면 함수가 실패합니다.

내가 테스트를 작성하고 분에 당신에게 그것을 증명합니다 ....

UPDATE 사실, 난 직장에서 CF 팔이 그것을 테스트 할 수 없습니다.

아래의 CF8에서는 LOCAL.Foo을 설정할 수 있지만 실제로는 CF 범위가 아닙니다.

CF9 이상에서는 LOCAL을 함수 내에서만 설정할 수 있습니다.

<cffunction> 
    <cfset LOCAL.foo = 1> 
    <cfreturn LOCAL.foo> 
</cffunction> 
+0

시간을내어 주셔서 감사합니다. 명확성을 위해 예제를 지나치게 단순화했습니다. 이제는 함수 호출을 포함합니다. 버그 (?)는 여전히 존재합니다. – stubotnik

+2

함수 외부에서 LOCAL 범위 변수를 만들면 variables.LOCAL이됩니다. –