gpt4 book ai didi

raku - 如何在 Perl 6 中向现有类添加方法?

转载 作者:行者123 更新时间:2023-12-03 21:23:37 24 4
gpt4 key购买 nike

Int class有一个方法 is_prime ,所以我想,只是为了傻笑,我想在 Int 中添加一些其他方法对于我的一些业余爱好项目,做数论的东西。

我以为我可以做这样的事情:

class Int {
method is-even (Int:D $number ) returns Bool:D {
return False if $number % 2;
return True;
}
}

say 137.is-even;

但这不起作用:
===SORRY!===
P6opaque: must compose before allocating

我不知道这是否意味着我不能这样做,或者我做错了。

我可以轻松创建一个继承自 Int 的新类。 ,但这不是我感兴趣的:
class MyInt is Int {
method is-even () returns Bool:D {
return False if self % 2;
return True;
}
}

my $n = MyInt.new(138);
say $n.is-even;

我不是在寻找解决方法或替代解决方案。

最佳答案

这有语法糖 - augment :

use MONKEY-TYPING;

augment class Int {
method is-even() returns Bool:D {
return False if self % 2;
return True;
}
}

由于两个原因,增加类被认为是危险的:首先,在远处进行操作,其次,因为(据我所知),存在未定义行为去优化的潜力,因为它可能会使各种方法缓存处于无效状态。

因此,要求提供 MONKEY-TYPING pragma 在您被允许使用它之前。

顺便说一句,请注意 is-even可以更紧凑地写成 self %% 2 .

关于raku - 如何在 Perl 6 中向现有类添加方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34504849/

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