role Metamodel::MROBasedMethodDispatch { }

警告:此角色是 Rakudo 实现的一部分,不属于语言规范。

此角色实现基于相关(通常是“超类”/“父类”)类型的 MRO 定位方法。

方法§

方法 find_method§

method find_method($obj$name:$no_fallback*%adverbs)

给定一个方法名,它将返回该名称的方法对象,该对象在方法解析顺序 (MRO) 中最接近。如果找不到方法,它将返回特定于 VM 的哨兵值(通常是低级 NULL 值),可以使用对定义性的测试对其进行测试

for <upper-case  uc> {
    Str.^find_method: $^meth andthen .("foo").say
        orelse "method `$meth` not found".say
}
# OUTPUT: 
# method `upper-case` not found 
# FOO 

如果提供了 :no_fallback,则不考虑后备方法。

方法 find_method_qualified§

method find_method_qualified($obj$type$name)

给定一个方法名和一个类型,从该类型返回方法。这用于类似这样的调用中

self.SomeParentClass::the_method();

方法 can§

method can($obj$name)

返回对象可以执行的该名称的方法列表。

方法 publish_method_cache§

method publish_method_cache($obj)

遍历 MRO 并将方法添加到缓存中,除非类层次结构中较低位置的另一个方法“隐藏”了它。