role Metamodel::C3MRO { }

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

元模型角色适用于C3 方法解析顺序 (MRO)注意:此方法以及几乎整个元模型都是 Rakudo 实现的一部分。

类型的方法解析顺序是包含类型本身的扁平类型列表,以及(递归地)所有超类。它确定在给定名称的情况下访问哪些类型来确定要调用的方法,或使用nextsamecallsamenextwithcallwith查找链中的下一个方法。

class CommonAncestor { };   # implicitly inherits from Any 
class Child1 is CommonAncestor { }
class Child2 is CommonAncestor { }
class GrandChild2 is Child2 { }
class Weird is Child1 is GrandChild2 { };
 
say Weird.^mro# OUTPUT: «(Weird) (Child1) (GrandChild2) (Child2) (CommonAncestor) (Any) (Mu)␤» 

C3 是 Raku 中类和语法的默认解析顺序。请注意,角色通常不会出现在方法解析顺序中(除非它们被双关语到一个类中,另一个类型从此类继承),因为方法在角色应用时被复制到类中。

方法§

方法 compute_mro§

method compute_mro($type)

计算方法解析顺序。

方法 mro§

method mro($type)

返回方法解析顺序中的类型列表,即使那些标记为is hidden的类型也是如此。

say Int.^mro;   # OUTPUT: «((Int) (Cool) (Any) (Mu))␤»

方法 mro_unhidden§

method mro_unhidden($type)

返回方法解析顺序中的类型列表,不包括标记为is hidden的类型。