role Metamodel::MultipleInheritance {}

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

类、角色和语法可以具有父类,即方法查找回退到的类,以及子类所遵循的类型。

此角色实现了具有零个、一个或多个父类(或超类)的功能。

此外,它还支持隐藏类的概念,其方法被排除在正常的调度链之外,例如 nextsame 会忽略它。

这可以有两种形式:标记为 is hidden 的类中的方法通常被排除在调度链之外,而 class A hides B 会将 B 作为父类添加到 A 中,但会将其隐藏在方法解析顺序之外,以便mro_unhidden跳过它。

方法§

方法 add_parent§

method add_parent($obj$parent:$hides)

$parent 添加为父类型。如果 $hides 设置为真值,则父类型将作为隐藏父类型添加。

$parent 必须是完全组合的类型。否则,将抛出类型为 X::Inheritance::NotComposed 的异常。

方法 parents§

method parents($obj:$all:$tree)

返回父类列表。默认情况下,它会停止在 CoolAnyMu,你可以通过提供 :all 副词来抑制它。使用 :tree,将返回一个嵌套列表。

class D { };
class C1 is D { };
class C2 is D { };
class B is C1 is C2 { };
class A is B { };
 
say A.^parents(:all).raku;
# OUTPUT: «(B, C1, C2, D, Any, Mu)␤» 
say A.^parents(:all:tree).raku;
# OUTPUT: «[B, ([C1, [D, [Any, [Mu]]]], [C2, [D, [Any, [Mu]]]])]␤»

方法 hides§

method hides($obj)

返回所有隐藏父类的列表。

方法 hidden§

method hidden($obj)

当且仅当类被标记为特征 is hidden 时,返回真值。

方法 set_hidden§

method set_hidden($obj)

将类型标记为隐藏。