Coldfusion是否支持动态参数?

Joh*_*ohn 6 python coldfusion coldfusion-9

在python中有一个*args约定,我想知道CF9是否支持类似的东西.

这是python示例

>>> def func(*args):
        for a in args:
               print a, "is a quality argument"


>>> func(1, 2, 3)
1 is a quality argument
2 is a quality argument
3 is a quality argument
>>> 
Run Code Online (Sandbox Code Playgroud)

Pet*_*ton 10

是的,CFML支持动态参数,只要它支持用户定义的函数.

所有参数,无论是显式定义的,还是在未定义的情况下传入,都存在于Arguments范围中.

Arguments范围可以视为数组和结构(键/值).


使用脚本语法,这是与您的示例最接近的等效项:

function func()
{
        for (a in arguments)
               WriteOutput(arguments[a] & "is a quality argument");
}
Run Code Online (Sandbox Code Playgroud)

请注意,a在此示例中是键名,而不是值,因此使用了原因arguments[a].

要被视为代码,上面的脚本必须在<cfscript>.. </cfscript>标签内,或者在文件内的component {.. }块内.cfc.


这里有几个标签版本,第一个等同于for/in循环:

<cffunction name="func">
    <cfloop item="a" collection=#Arguments#>
        <cfoutput>#Arguments[a]# is a quality argument</cfoutput>
    </cfloop>
</cffunction>
Run Code Online (Sandbox Code Playgroud)


这个允许您直接访问该值(即a此处的值):

<cffunction name="func">
    <cfloop index="a" array=#Arguments#>
        <cfoutput>#a# is a quality argument</cfoutput>
    </cfloop>
</cffunction>
Run Code Online (Sandbox Code Playgroud)


在Railo*CFML中,最后一个示例可以在脚本中表示为:

function func()
{
    loop index="a" array=Arguments
    {
        WriteOutput(a & 'is a quality argument');
    }
}
Run Code Online (Sandbox Code Playgroud)

*Railo是Adobe ColdFusion的两个开源替代品之一,另一个是Open BlueDragon.

  • 我无法让你的最后一个例子工作......我得到的错误是在FUNCTION声明中缺少`function keyword....有什么建议吗? (2认同)
  • `loop index ="a"array = Arguments`?我从来没有见过这个,这对于Railo还是什么? (2认同)