在ColdFusion中调用函数时如何只指定一些可选参数?

Kip*_*Kip 15 syntax coldfusion optional-parameters

我有一个ColdFusion函数"foo",它有三个args,后两个是可选的:

<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>
Run Code Online (Sandbox Code Playgroud)

我想调用foo,传入arg1和arg3,但遗漏了arg2.我知道如果我使用函数调用这是可能的cfinvoke,但是这种语法真的很冗长和复杂.我试过这两种方法,都没有用:

<cfset somevar=foo(1, arg3=3) /> <!--- gives syntax error --->
<cfset somevar=foo(1, arg3:3) /> <!--- gives syntax error --->
Run Code Online (Sandbox Code Playgroud)

Pat*_*ney 30

你必须始终使用命名参数.您不能像在其他语言中那样混合命名和位置参数.

<cfset somevar = foo(arg1=1, arg3=3) />   
Run Code Online (Sandbox Code Playgroud)


Hen*_*nry 20

或者..你可以使用ArgumentCollection

在CF9或以上......

<cfset somevar = foo(argumentCollection={arg1=1, arg3=3})>
Run Code Online (Sandbox Code Playgroud)

在CF8或以上......

<cfset args = {arg1=1, arg3=3}>
<cfset somevar = foo(argumentCollection=args)>
Run Code Online (Sandbox Code Playgroud)

如果CF7或以下......

<cfset args = structNew()>
<cfset args.arg1 = 1>
<cfset args.arg3 = 3>
<cfset somevar = foo(argumentCollection=args)>
Run Code Online (Sandbox Code Playgroud)