第四十章 Caché 函數大全 $METHOD 函數
支持對實例方法的調用。
大綱
$METHOD(instance, methodname, arg1, arg2, arg3, ... )
參數
- instance 計算結果爲對象引用的表達式。表達式的值必須是類的內存中實例的值。
- methodname 計算結果爲字符串的表達式。字符串的值必須與作爲第一個參數給定的類實例中現有方法的名稱完全匹配。
- arg1, arg2, arg3, ... 要替換指定方法的參數的一系列表達式。表達式的值可以是任何類型。實現者有責任確保提供的表達式在類型上匹配,並且具有該方法期望的邊界的值。(如果指定的方法不需要參數,則函數調用中不需要使用類名和方法名以外的任何內容。如果方法需要參數,則管理必須提供的內容的規則是目標方法的規則。)
描述
$method
爲指定類的指定實例執行命名實例方法。
此函數允許ObjectScript程序調用某個類的現有實例中的任意方法。由於第一個參數必須是對對象的引用,因此它是在執行時計算的。方法名稱可以在運行時計算,也可以作爲字符串文字提供。如果方法採用參數,則從方法名稱後面的參數列表中提供這些參數。最多可以向該方法傳遞255個參數值。如果方法需要參數,則控制必須提供的內容的規則是目標方法的規則。要調用類方法而不是實例方法,請使用$CLASSMETHOD
函數。
$method
作爲函數或過程的調用決定了目標方法的調用。可以使用do
命令調用$method
,丟棄返回值。
當在類實例的一個方法中使用來引用該實例的另一個方法時,$method
可能會省略實例。但是,仍然需要通常跟在實例後面的逗號。
如果嘗試調用不存在的方法或被聲明爲類方法的方法,則會導致 <METHOD DOES NOT EXIST>
錯誤。
示例
以下示例顯示了用作功能的$METHOD
:
/// d ##class(PHA.TEST.Function).METHOD()
ClassMethod METHOD()
{
SET ListOfStuff = ##class(%Library.ListOfDataTypes).%New()
FOR i = "First", "Second", "Third", "Fourth"{
DO $METHOD(ListOfStuff, "Insert", i _ "-Element")
}
SET methodname = "Count"
SET elements = $METHOD(ListOfStuff, methodname)
WRITE "Elements: ",elements,!
SET i = $RANDOM(elements) + 1
WRITE "Element #", i , " = " , $METHOD(ListOfStuff,"GetAt", i), !
}
DHC-APP>d ##class(PHA.TEST.Function).METHOD()
Elements: 4
Element #1 = First-Element
DHC-APP>d ##class(PHA.TEST.Function).METHOD()
Elements: 4
Element #4 = Fourth-Element
DHC-APP>d ##class(PHA.TEST.Function).METHOD()
Elements: 4
Element #2 = Second-Element