在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
>>>
答案 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”]
访问