警告:此角色是 Rakudo 实现的一部分,不属于语言规范。
类、角色和语法可以具有父类,即方法查找回退到的类,以及子类所遵循的类型。
此角色实现了具有零个、一个或多个父类(或超类)的功能。
此外,它还支持隐藏类的概念,其方法被排除在正常的调度链之外,例如 nextsame
会忽略它。
这可以有两种形式:标记为 is hidden
的类中的方法通常被排除在调度链之外,而 class A hides B
会将 B
作为父类添加到 A
中,但会将其隐藏在方法解析顺序之外,以便mro_unhidden跳过它。
方法§
方法 add_parent§
method add_parent(, , :)
将 $parent
添加为父类型。如果 $hides
设置为真值,则父类型将作为隐藏父类型添加。
$parent
必须是完全组合的类型。否则,将抛出类型为 X::Inheritance::NotComposed
的异常。
方法 parents§
method parents(, :, :)
返回父类列表。默认情况下,它会停止在 Cool
、Any
或 Mu
,你可以通过提供 :all
副词来抑制它。使用 :tree
,将返回一个嵌套列表。
;is D ;is D ;is C1 is C2 ;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()
返回所有隐藏父类的列表。
方法 hidden§
method hidden()
当且仅当类被标记为特征 is hidden
时,返回真值。
方法 set_hidden§
method set_hidden()
将类型标记为隐藏。