如何让Perl 6级决赛?

Tak*_*kao 7 perl6

例如,我有这样的代码:

class Foo {}
class Bar is Foo {}
Run Code Online (Sandbox Code Playgroud)

虽然这个行动的用处是有争议的,但是有可能禁止继承Foo吗?

Jon*_*ton 11

在Perl 6语言中没有内置的方法来禁止继承类,这是一个刻意采取的设计决策.即使使用元编程也无法实现这一点,因为继承行为是由子类驱动的,父类在此过程中没有发言权.

但是,通过将它们声明为a submethod而不是a ,可以将各个方法标记为不被继承method.

class P {
    submethod m() { say "not inherited" }
}
class C is P {
}

say ?P.can('m');  # True
say ?C.can('m');  # False
Run Code Online (Sandbox Code Playgroud)