gpt4 book ai didi

raku - 如何设置类的默认参数化?

转载 作者:行者123 更新时间:2023-12-04 02:14:10 25 4
gpt4 key购买 nike

^parameterize方法允许使用一些给定的信息(例如角色)参数化一个类。

my role A[::T = Mu] { }

my class B {
method ^parameterize(Mu \base, Mu \type) {
my \what := base.^mixin(A[type]);
what.^set_name(base.^name ~ '[' ~ type.^name ~ ']');
what
}
}

dd B[Int]; # B[Int]
dd B[Int].^roles; # (A[Int],)

但是,我还没有找到制作 的方法。未参数化 B 的版本做角色的未参数化版本 A .
dd B;        # B
dd B.^roles; # (), want to see (A[Mu],)

我试图添加一个 ^compose方法,但只有在类被参数化时才会被调用。

非常欢迎建议!

最佳答案

我得出的结论是你不能(至少在可预见的 future 不能)。所以我退后一步,看看我真正想要实现的目标。和 那个结果证明是可能的:

my role A[::T] {
method foobar() { T }
}

my class B {
method foobar() { Mu }

method ^parameterize(Mu \base, Mu \type) {
my \what := base.^mixin(A[type]);
what.^set_name(base.^name ~ '[' ~ type.^name ~ ']');
what
}
}

dd B.foobar; # Mu
dd B[Int].foobar; # Int

方法 foobar默认情况下由 B 提供类(class)。如果参数化 B类,它会混入另一个版本的 foobar方法(隐藏原始方法),它返回参数化给定的类型。

最后,这给了我允许参数化 QuantHash 的框架。 es,我自己和最近其他人的长期要求。

关于raku - 如何设置类的默认参数化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54172262/

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