Coldfusion是否支持动态参数?

时间:2011-11-14 15:57:37

标签: 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
>>> 

3 个答案:

答案 0 :(得分:10)

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

所有参数,无论是明确定义的,还是在未定义的情况下传入,都存在于Arguments范围内。

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


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

function func()
{
        for (a in arguments)
               WriteOutput(arguments[a] & "is a quality argument");
}

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

要被视为代码,上述脚本必须位于<cfscript> .. </cfscript>标记内,或者位于component { .. }块内{ {1}}档案。


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

.cfc


这个允许您直接访问该值(即<cffunction name="func"> <cfloop item="a" collection=#Arguments#> <cfoutput>#Arguments[a]# is a quality argument</cfoutput> </cfloop> </cffunction> 是此处的值):

a


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

<cffunction name="func">
    <cfloop index="a" array=#Arguments#>
        <cfoutput>#a# is a quality argument</cfoutput>
    </cfloop>
</cffunction>

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

答案 1 :(得分:2)

是的,参数作为一个名为&#34; arguments&#34;的数组传递给函数。另外,你可以传入一个名为&#34; argumentCollection&#34;的数组。进入一个功能。

public void function myFunct(){
    var myVar = "";

    if(arrayLen(arguments)){
        myVar = arguments[1];
    }
}

使用动态参数调用函数:

myFunc("hello","world");
  OR
myFunc(argumentCollection=["Hello","World"]);

此外,您可以通过这种方式扩展参数,使命名参数和参数超出命名参数:

public void function myFunction(String arg1){
  var secondArgument = "";

  if(arraylen(arguments) > 1){
    secondArgument = arguments[2];
  }
}

myFunction("Hello","World");

答案 2 :(得分:0)

根据函数的调用方式,参数可以包含在一个结构中,该结构包含与其位置相关的数字键(基于1的索引)或包含参数名称作为键的结构。

如果你调用这样的函数;

func(1, "foo");

然后参数将作为参数[1]和参数[2]

访问

如果函数调用传入命名参数或使用argumentCollection,例如;

func(foo=1, bar="foo");

然后参数可以作为参数[“foo”]和参数[“bar”]

访问