2009-07-17 6 views
3

기본적으로 ColdFusion은 값으로 간단한 유형 (예 : 숫자, 문자열 및 GUID)을 함수에 전달합니다. 참조로 간단한 형식을 전달하고 싶습니다.ColdFusion에서 참조로 간단한 값을 전달할 수 있습니까?

현재 구조체에 간단한 값을 래핑하고 있습니다 (참조로 전달됩니다). 이건 내 문제를 해결하지만, 아주 못생긴 : 나는 오히려이 같은

<!--- TheFunctionName----> 
<cffunction name="TheFunctionName"> 
    <cfargument name="OutVariable" type="struct"> 
    <cfset OutVariable.ID = 5> 
</cffunction> 

<cfset OutVariable=StructNew()> 
<cfset TheFunctionName(OutVariable)> 

<!--- I want this to output 5---> 
<cfoutput>#OutVariable.ID#</cfoutput> 

것 :

<!--- TheFunctionName----> 
<cffunction name="TheFunctionName"> 
    <cfargument name="OutVariable" passbyref="true"> 
    <cfset OutVariable = 5> 
</cffunction> 

<cfset TheFunctionName(OutVariable)> 

<!--- I want this to output 5---> 
<cfoutput>#OutVariable#</cfoutput> 

답변

8

AFAIK는 ColdFusion에서 참조에 의해 간단한 값을 전달하는 방법은 없습니다. 내가 생각할 수있는 유일한 해결책은 이미 사용하고있는 방법입니다.

대신, 나는 언어의 곡식을 사용하도록 프로그램을 재구성하는 것이 좋습니다. 여러 값을 수정하는 경우

<cfset SomeVar = TheFunctionName(SomeVar)> 

을 다시 걸음을 : 경우에, 당신은 단지, 함수는 새 값을 반환 할 수있는 "수정"하고 전화를 좋아하는 단 하나의 간단한 값이 어디 CFC의 메소드가되는 mutator 함수를 사용하여 여러 값을 하나의 CFC에 묶을 수 있는지 여부를 생각해보십시오. 이것은 어쨌든 명확하고 유지 보수가 가능한 솔루션 일 수 있습니다.

1

함수 외부 및 내부에서 사용되는 변수를 두 코드 영역에 존재하는 범위에 배치 할 수 있습니다. 예를 들어 변수를 "세션"또는 "요청"범위에 넣으면 함수 내에서 변수에 액세스 할 수 있습니다. 변경 사항은 지속됩니다.

이 작업을 수행 할 때 실제로 변수를 함수에 "전달"하고 있지 않습니다. 이 함수는 코드를 작성하는 방법에 따라 변수가 있다고 가정하거나 생성합니다.

<cffunction name="TheFunctionName"> 
    <cfset Request.StrVar = "inside function<br />" /> 
</cffunction> 

<cfscript> 
    Request.StrVar = "outside function<br />"; 
    WriteOutput(Request.StrVar); 
    TheFunctionName(); 
    WriteOutput(Request.StrVar); 
</cfscript> 

About ColdFusion Scopes

당신이 <cfparam> 태그 또는 IsDefined() 기능을 몇 가지 마술을해야 할 것이다 필요가있는 경우 사전에 변수를 선언 호출 페이지에 대한 의심이있는 경우

.

1

당신이 경우

  1. 는 CFC의 내부 함수를 선언
  2. 당신은 "returnVariable과"는 < > 된 cfinvoke 매개 변수를 지정 할 수있을 것입니다 >

된 cfinvoke <를 사용하여 함수를 호출 그런 다음 원하는대로 변수를 출력하십시오.

<cfinvoke component="this" method="TheFunctionName" returnvariable="blah"> 
    <cfinvokeargument name="data" value="whatever" type="string"> 

    <cfreturn data> 
</cfinvoke> 

<cfdump var="#blah#"> 

cfscript에 모든 것을 쓰고 있다면, 나는 SurroundedByFish가 말한 것과 같이 갈 것입니다.

관련 문제