方法參數
方法可以在逗號分隔的列表中接受位置參數。對于每個參數,可以指定類型和默認值。
例如,下面是一個接受三個參數的方法的部分定義。這對IRIS
類中的ObjectScript
和Python
方法都是有效的語法:
Method Calculate(count As %Integer, name, state As %String = "CA") as %Numeric
{
// ...
}
注意,其中兩個參數具有顯式類型,一個參數具有默認值。通常,顯式指定每個參數的類型是個好主意。
注意:如果一個方法是在Python
中定義的,并且有任何帶有默認值的參數,那么這些參數必須位于參數列表的末尾,以避免編譯錯誤。
跳過參數
調用方法時,如果有合適的默認值,可以跳過參數。ObjectScript
和Python
都有自己的語法來跳過參數。
在ObjectScript中,可以通過不為參數提供值并保持逗號結構來跳過該參數。例如:
set myval=##class(mypackage.myclass).GetValue(,,,,,,4)
在IRIS
類中,Python
方法的簽名必須首先列出所需的參數,然后是具有默認值的任何參數。
調用方法時,必須按照方法簽名的順序提供參數。因此,一旦你跳過了一個參數,你也必須跳過它后面的所有參數。例如:
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
通過值或引用傳遞變量
當調用一個方法時,可以通過值或引用將變量的值傳遞給該方法。
方法的簽名通常表明是否打算通過引用傳遞參數。例如:
Method MyMethod(argument1, ByRef argument2, Output argument3)
ByRef
關鍵字指示應該通過引用傳遞此參數。Output
關鍵字指示應該通過引用傳遞此參數,并且該方法忽略最初給此參數的任何值。
類似地,當定義一個方法時,可以在方法簽名中使用ByRef
和Output
關鍵字來通知其他用戶該方法的使用方式。
要在ObjectScript
中通過引用傳遞參數,請在調用方法時在變量名之前放置一個句號。在Python
中,對要傳遞的值使用iris.ref()
,并在引用上調用該方法。這兩個都顯示在下面的例子中:
Do MyMethod(arg1, .arg2, .arg3)
arg2=iris.ref("peanut butter")
arg3=iris.ref("jelly")
MyMethod(arg1,arg2,arg3)
重要信息:ByRef
和 Output
關鍵字提供的信息對于使用 類引用的任何人都有利。它們不影響代碼的行為。方法的編寫者有責任強制執行有關如何調用該方法的任何規則。
可變數量的參數
可以定義一個方法,使其接受可變數量的參數。例如:
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])
}
指定默認值
要在 ObjectScript
或 Python
方法中指定參數的默認值,請使用以下示例中所示的語法:
Method Test(flag As %Integer = 0)
{
//method details
}
調用方法時,它會對任何缺少的參數使用其默認值(如果指定)。如果方法是用 Python
編寫的,則任何具有默認值的參數都必須在參數列表的末尾定義。
在 ObjectScript
中,另一個選項是使用 $GET
函數設置默認值。例如:
Method Test(flag As %Integer)
{
set flag=$GET(flag,0)
//method details
}
但是,這種技術不會影響類簽名。
-
參數
+關注
關注
11文章
1838瀏覽量
32269 -
代碼
+關注
關注
30文章
4791瀏覽量
68699 -
編譯
+關注
關注
0文章
659瀏覽量
32895
發布評論請先 登錄
相關推薦
評論