gpt4 book ai didi

raku - 如何创建一个不从任何其他类继承的类?

转载 作者:行者123 更新时间:2023-12-04 03:19:02 24 4
gpt4 key购买 nike

如果你创建一个类:

class Foo { }

该类将从 Any 继承其所有方法,然后是 Mu .

我想创建一个不从任何其他类继承的类:它应该包含一个 FALLBACK应该捕获对该对象实例的所有方法调用的方法。

我浏览了 MetaModel代码,但似乎没有一个简单的方法来实现这个目标。欢迎所有建议!

更新 :我决定按照 Jonathan Worthington 的描述去拦截任何方法调用方式。这在 CPAN 上产生了两个新的 Perl 6 模块: InterceptAllMethodsObject::Trampoline .

最佳答案

这是另一个想法:您可以创建一个继承自 ClassHOW 的新元类。 , 但会覆盖作用 Perl6::Metamodel::MROBasedMethodDispatch 的方法提供跳过所有父类的版本。

例如,这个:

# Maybe this belongs on a role. Also, may be worth memoizing.
method can($obj, $name) {
my @meths;
my %smt := self.submethod_table($obj);
if nqp::existskey(%smt, $name) {
@meths.push(%smt{$name});
}
for self.mro($obj) {
my %mt := $_.HOW.method_table($_);
if nqp::existskey(%mt, $name) {
@meths.push(%mt{$name})
}
}
@meths
}

会成为
method can($obj, $name) {
my @meths;
my %smt := self.submethod_table($obj);
if nqp::existskey(%smt, $name) {
@meths.push(%smt{$name});
}
@meths
}

这样,您就不会遇到期望所有类型都符合 Mu 的代码的问题。 ,但您仍然可以避免意外调用 Mu 中的方法.

关于raku - 如何创建一个不从任何其他类继承的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51031264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com