3

デフォルトでは、ColdFusionは単純な型(数値、文字列、GUIDなど)を値で関数に渡します。簡単な型を参考にして渡したいのですが。

私は現在、構造体で単純な値をラップしています(それらは参照によって渡されます)。これは私の問題を解決しますが、それは非常に醜いです:

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

3 に答える 3

8

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

代わりに、言語の粒度で動作するようにプログラムを再構築することをお勧めします。「変更」する単純な値が1つしかない場合は、関数に新しい値を返させて、次のように呼び出すことができます。

<cfset SomeVar = TheFunctionName(SomeVar)>

複数の値を変更する場合は、一歩下がって、ミューテーター関数がCFCのメソッドになるように、それらの複数の値をCFCにバンドルできるかどうかを検討してください。とにかく、これはより明確で保守しやすいソリューションになる可能性があります。

于 2009-07-17T22:17:51.397 に答える
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>

ColdFusionスコープについて

呼び出しページが必要なときに変数を事前に宣言することに疑問がある場合は、<cfparam>タグまたはIsDefined()関数を使用していくつかの作業を行う必要があります。

于 2009-07-17T22:33:16.437 に答える
1

もし、あんたが:

  1. CFC内で関数を宣言する
  2. <cfinvoke>を使用して関数を呼び出します

<cfinvoke>パラメーター"returnvariable"を指定して、その変数を好きなように出力することができます。

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

     <cfreturn data>
</cfinvoke>

<cfdump var="#blah#">

すべてをcfscriptで記述している場合は、SurroundedByFishが言ったことを使用します。

于 2009-07-18T02:41:19.917 に答える