方法參數(shù)
方法可以在逗號(hào)分隔的列表中接受位置參數(shù)。對(duì)于每個(gè)參數(shù),可以指定類型和默認(rèn)值。
例如,下面是一個(gè)接受三個(gè)參數(shù)的方法的部分定義。這對(duì)IRIS
類中的ObjectScript
和Python
方法都是有效的語(yǔ)法:
Method Calculate(count As %Integer, name, state As %String = "CA") as %Numeric
{
// ...
}
注意,其中兩個(gè)參數(shù)具有顯式類型,一個(gè)參數(shù)具有默認(rèn)值。通常,顯式指定每個(gè)參數(shù)的類型是個(gè)好主意。
注意:如果一個(gè)方法是在Python
中定義的,并且有任何帶有默認(rèn)值的參數(shù),那么這些參數(shù)必須位于參數(shù)列表的末尾,以避免編譯錯(cuò)誤。
跳過(guò)參數(shù)
調(diào)用方法時(shí),如果有合適的默認(rèn)值,可以跳過(guò)參數(shù)。ObjectScript
和Python
都有自己的語(yǔ)法來(lái)跳過(guò)參數(shù)。
在ObjectScript中,可以通過(guò)不為參數(shù)提供值并保持逗號(hào)結(jié)構(gòu)來(lái)跳過(guò)該參數(shù)。例如:
set myval=##class(mypackage.myclass).GetValue(,,,,,,4)
在IRIS
類中,Python
方法的簽名必須首先列出所需的參數(shù),然后是具有默認(rèn)值的任何參數(shù)。
調(diào)用方法時(shí),必須按照方法簽名的順序提供參數(shù)。因此,一旦你跳過(guò)了一個(gè)參數(shù),你也必須跳過(guò)它后面的所有參數(shù)。例如:
ClassMethod Skip(a1, a2 As %Integer = 2, a3 As %Integer = 3) [ Language = python ]
{
print(a1, a2, a3)
}
TESTNAMESPACE >do ##class(mypackage.myclass).Skip(1)
1 2 3
通過(guò)值或引用傳遞變量
當(dāng)調(diào)用一個(gè)方法時(shí),可以通過(guò)值或引用將變量的值傳遞給該方法。
方法的簽名通常表明是否打算通過(guò)引用傳遞參數(shù)。例如:
Method MyMethod(argument1, ByRef argument2, Output argument3)
ByRef
關(guān)鍵字指示應(yīng)該通過(guò)引用傳遞此參數(shù)。Output
關(guān)鍵字指示應(yīng)該通過(guò)引用傳遞此參數(shù),并且該方法忽略最初給此參數(shù)的任何值。
類似地,當(dāng)定義一個(gè)方法時(shí),可以在方法簽名中使用ByRef
和Output
關(guān)鍵字來(lái)通知其他用戶該方法的使用方式。
要在ObjectScript
中通過(guò)引用傳遞參數(shù),請(qǐng)?jiān)谡{(diào)用方法時(shí)在變量名之前放置一個(gè)句號(hào)。在Python
中,對(duì)要傳遞的值使用iris.ref()
,并在引用上調(diào)用該方法。這兩個(gè)都顯示在下面的例子中:
Do MyMethod(arg1, .arg2, .arg3)
arg2=iris.ref("peanut butter")
arg3=iris.ref("jelly")
MyMethod(arg1,arg2,arg3)
重要信息:ByRef
和 Output
關(guān)鍵字提供的信息對(duì)于使用 類引用的任何人都有利。它們不影響代碼的行為。方法的編寫(xiě)者有責(zé)任強(qiáng)制執(zhí)行有關(guān)如何調(diào)用該方法的任何規(guī)則。
可變數(shù)量的參數(shù)
可以定義一個(gè)方法,使其接受可變數(shù)量的參數(shù)。例如:
ClassMethod MultiArg(Arg1... As %List) [ Language = objectscript ]
{
Set args = $GET(Arg1, 0)
Write "Invocation has ",
args,
" element",
$SELECT((args=1):"", 1:"s"), !
For i = 1 : 1 : args
{
Write "Argument[", i , "]: ", $GET(Arg1(i), "< NULL >"), !
}
}
ClassMethod MultiArg(Arg1... As %List) [ Language = Python ]
{
print("Invocation has", len(Arg1), "elements")
for i in range(len(Arg1)):
print("Argument[" + str(i+1) + "]: " + Arg1[i])
}
指定默認(rèn)值
要在 ObjectScript
或 Python
方法中指定參數(shù)的默認(rèn)值,請(qǐng)使用以下示例中所示的語(yǔ)法:
Method Test(flag As %Integer = 0)
{
//method details
}
調(diào)用方法時(shí),它會(huì)對(duì)任何缺少的參數(shù)使用其默認(rèn)值(如果指定)。如果方法是用 Python
編寫(xiě)的,則任何具有默認(rèn)值的參數(shù)都必須在參數(shù)列表的末尾定義。
在 ObjectScript
中,另一個(gè)選項(xiàng)是使用 $GET
函數(shù)設(shè)置默認(rèn)值。例如:
Method Test(flag As %Integer)
{
set flag=$GET(flag,0)
//method details
}
但是,這種技術(shù)不會(huì)影響類簽名。
-
參數(shù)
+關(guān)注
關(guān)注
11文章
1733瀏覽量
31982 -
代碼
+關(guān)注
關(guān)注
30文章
4697瀏覽量
68083 -
編譯
+關(guān)注
關(guān)注
0文章
647瀏覽量
32742
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論