在Python中有*args
約定我想知道CF9是否支持類似的東西。Coldfusion是否支持動態參數?
這裏是蟒示例
>>> 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
>>>
在Python中有*args
約定我想知道CF9是否支持類似的東西。Coldfusion是否支持動態參數?
這裏是蟒示例
>>> 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
>>>
是,CFML已經支持動態參數,只要它支持用戶定義的函數訪問。
所有參數,無論是明確定義的,還是傳遞而未定義,都存在於Arguments範圍中。
參數作用域可被視爲數組和結構(鍵/值)。
這裏是最接近等同於你的例子,使用腳本語法:
function func()
{
for (a in arguments)
WriteOutput(arguments[a] & "is a quality argument");
}
注意a
在這個例子中是按鍵的名稱,而不是價值,因此,爲什麼arguments[a]
使用。
被視爲代碼,上述腳本必須是內<cfscript>
.. </cfscript>
標記,或者可替換地.cfc
文件內的component {
.. }
塊內。
這裏有一對夫婦的標籤版本,第一個相當於for/in循環:
<cffunction name="func">
<cfloop item="a" collection=#Arguments#>
<cfoutput>#Arguments[a]# is a quality argument</cfoutput>
</cfloop>
</cffunction>
而這一次,您可以直接訪問值(即a
是這裏的值):
<cffunction name="func">
<cfloop index="a" array=#Arguments#>
<cfoutput>#a# is a quality argument</cfoutput>
</cfloop>
</cffunction>
在Railo * CFML,最後這個例子可以在腳本中表示爲:
function func()
{
loop index="a" array=Arguments
{
WriteOutput(a & 'is a quality argument');
}
}
* Railo是兩個開源替代一個Adobe ColdFusion,另一個是Open BlueDragon。
是的,參數被傳遞到用作所謂的「參數」的陣列。另外,你可以將一個名爲「argumentCollection」的數組傳遞給一個函數。
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");
我以爲CF從索引1開始?在這種情況下它有什麼不同? **編輯**不要忘記第一個=)。 – John
您是對的,最近一直在編寫太多的JavaScript :-) – bittersweetryan
您也可以將argumentCollection作爲命名參數的結構傳遞。 'myFunc(argumentCollection = {foo =「hello」,bar =「word」}' –
根據如何該函數被調用的參數可能包含在一個結構中,數字鍵與它們的位置相關(基於1的索引)或者以參數名稱作爲關鍵字的結構。
如果你調用這樣的函數;
func(1, "foo");
那麼參數將作爲參數訪問[1]和參數[2]
如果函數調用傳遞命名的參數或使用argumentCollection,例如;
func(foo=1, bar="foo");
那麼參數是作爲參數[「foo」的]和參數[「酒吧」]
我有問題讓你的最後一個例子工作......我得到的錯誤是函數聲明中缺少函數關鍵字。「......任何建議? – John
第一個例子需要在塊 –
'loop index =」a「 array = Arguments'?我從來沒有見過這個,這是用於Railo還是什麼? – Henry