2009-07-17 15 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

私の知る限りでは、ColdFusionで参照することにより、単純な値を渡す方法はありません。私が考えることができる唯一の回避策は、あなたがすでに使っているものです。

代わりに、私はあなたのプログラムを言語の穀粒を扱うように再構成しようと提案します。 「修正」するだけの単純な値があります、あなたは自分の関数は、新しい値を返すように、とのようにそれを呼び出すことができます例では:

<cfset SomeVar = TheFunctionName(SomeVar)> 

あなたが複数の値を変更している場合には、バックステップを取りますこれらの複数の値をCFCにバンドルして、CFCのメソッドになるミューテータ関数をバンドルすることが可能かどうかについて考えてください。とにかにこれはもっと明確で保守的な解決策になるかもしれません。

1

関数の外部と内部で使用される変数を両方のコード領域に存在するスコープに配置することができます。例えば、変数を "session"または "request"スコープに置くと、関数内から変数にアクセスすることができます。変更はそのまま適用されます。

これを実行しているときに、関数に実際に変数を渡していないことに注意してください。この関数は、コードの作成方法に応じて、変数が存在するとみなしたり、作成したりします。

<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が言ったことに行きます。

関連する問題