第四十章 Caché 函式大全 $METHOD 函式

yaoxin521123發表於2020-09-30

文章目錄

第四十章 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

相關文章