gpt4 book ai didi

raku - 如何正确扩充Any?

转载 作者:行者123 更新时间:2023-12-04 10:33:46 26 4
gpt4 key购买 nike

以下程序:

use v6.c;

use MONKEY-TYPING;

augment class Any {
method show0 { self.say }}

augment class List {
method show1 { self.say }}

<hello world>.show0;
<hello world>.show1;

产生预期的输出:
(hello world)
(hello world)

而这个:
use v6.c;

use MONKEY-TYPING;

augment class Any {
method show0 { self.say }}

<hello world>.show0;

产生一个错误:
No such method 'show0' for invocant of type 'List'. Did you mean 'show0'?
in block <unit> at showcase.p6 line 9

这是一个错误还是我只是把它弄错了?

最佳答案

首先:增加核心类,至少在 Rakudo Perl 6 可预见的 future ,是 不是 一个好主意。它不适用于预编译。

其次:当一个类是另一个类的子类时,子类“知道”它继承自哪个类。唉,反过来不行:一个类不知道它的子类(至少在撰写本文时)。

这意味着如果你增加 Any ,它的子类都不知道应该重新组合自己。在您的第一个示例中,您使用 List 执行此操作。类通过增加。但是,如果您颠倒增强的顺序,它也不会起作用,因为 List类将在 Any 之前重新组合类将被重新组合。

因此,建议将任何使用角色的额外方法混合到类或对象中( mixins of roles )

关于raku - 如何正确扩充Any?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52718499/

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