检索方法的实现函数.
Method := GetMethod(Value , Name, ParamCount)
类型: Any
除了 ComObject 之外的任何类型的任何值.
类型: 字符串
省略此参数, 对 Value 本身进行验证, 如果成功, 则返回 Value. 否则, 请指定要检索的方法的名称.
如果省略(或者参数数没有被验证), 则会对 Call 方法进行基本检查, 以验证该对象可调用的.
否则, 请指定将被传递给方法或函数的参数数量. 如果指定, 可以查询该方法的 MinParams, MaxParams 和 IsVariadic 属性, 以验证它是否可以接受这个参数指定的数量. 如果这些属性不存在, 参数数就不会被验证.
这个计数不应该包括隐含的 this
参数.
类型: 函数对象
函数返回包含方法实现的函数对象, 如果省略了 Name, 则返回 Value 本身.
如果没有找到该方法或在没有调用属性获取器(getter) 的情况下不能被检索到, 则抛出 MethodError.
如果尝试验证, 可能会因为查询方法的属性而抛出异常. 如果验证失败, 则抛出 ValueError 或 MethodError.
方法可以通过以下方式来定义:
{Call: fn}
这样的描述符创建的任何属性, 其中 fn 实现了方法.当调用函数对象时, 需要为通常隐藏的 this 参数提供一个值. 例如, Method(Value, Parameters*)
.
尽管 GetMethod 的标准实现有上述限制, 但如果使用 Value.GetMethod(Name)
而不是 GetMethod(Value, Name)
, 对象 Value 可以定义自己的 GetMethod 的实现.
GetMethod(Value, "Call", N)
不等同于 GetMethod(Value,, N)
, 因为 Call 方法将函数对象本身作为参数, 而且其用法可能与 Value 的用法不同. 例如, Func.Prototype.Call
是一个单一的方法, 适用于所有内置和用户定义的函数, 因此必须接受任何数量的参数.
Objects, HasMethod, HasBase, HasProp
检索并报告有关 GetMethod 方法的信息.
method := GetMethod({}, "GetMethod") ; 这也是一种方法. MsgBox method.MaxParams ; 接受 2 个参数, 包括 'this'. MsgBox method = GetMethod ; 在这种情况下, 实际上是同一个对象.