第四十章 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
网友评论