18

3 つの引数を取る ColdFusion 関数「foo」があり、次の 2 つはオプションです。

<cffunction name="foo" access="public" returntype="any">
    <cfargument name="arg1" type="any" required="true" />
    <cfargument name="arg2" type="any" required="false" default="arg2" />
    <cfargument name="arg3" type="any" required="false" default="arg3" />

    ...

    <cfreturn whatever />
</cffunction>

arg1 と arg3 を渡し、 arg2 を除外して foo を呼び出したいとします。を使用して関数を呼び出すとこれが可能であることはわかってcfinvokeいますが、その構文は非常に冗長で複雑です。私はこれら2つのアプローチを試しましたが、どちらも機能しません:

<cfset somevar=foo(1, arg3=3) /> <!--- gives syntax error --->
<cfset somevar=foo(1, arg3:3) /> <!--- gives syntax error --->
4

4 に答える 4

21

または.. ArgumentCollectionを使用できます

CF9以上で...

<cfset somevar = foo(argumentCollection={arg1=1, arg3=3})>

CF8以上で...

<cfset args = {arg1=1, arg3=3}>
<cfset somevar = foo(argumentCollection=args)>

CF7以下なら…

<cfset args = structNew()>
<cfset args.arg1 = 1>
<cfset args.arg3 = 3>
<cfset somevar = foo(argumentCollection=args)>
于 2009-07-01T21:15:31.820 に答える
0

キップが投稿したように、私もいくつかの答えを探していました。以下は私が実装したものです。それが私たちの可能な解決策の連鎖に追加されることを願っています. <cfparam>cffunction コードに以下を追加しました。

<cffunction name="fn1" access="public" returntype="numeric">
   <cfargument name="arg1" type="numeric" required="true">
   <cfargument name="arg2" type="numeric" required="true">
   <cfargument name="arg3" type="query" required="false">
   <cfparam name="arguments.arg1" default=0>
   <cfparam name="arguments.arg2" default=0>
   <cfparam name="arguments.arg3" default=0>
   <cfreturn arguments.arg1 + arguments.arg2 + arguments.arg3>
</cffunction>

<cfoutput>#fn1(arg1=1,arg2=2)#</cfoutput>
于 2011-07-28T01:28:17.807 に答える