gpt4 book ai didi

raku - 在两个模块之间使用角色时出现问题

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

我正在制作一个具有多模块文件的模块,
在不同模块中使用角色时遇到了这个问题。

例如我们有两个模块 Foo 和 Bar,每个模块都有一个角色。

module Foo { 
role foo is export {

}
}

module Bar {
import Foo;

role bar is export does foo {

}
}

import Foo;
import Bar;

sub f(foo \k) { }

f(bar.new);

我认为代码很好,但 rakudo 说它认为 bar 不是 foo 并拒绝编译。

这里有什么问题?

最佳答案

这对我来说似乎是一个错误。一些进一步的调查:

module Foo {
role Bar is export {}
}

module Quux {
import Foo;
constant Barr = Bar;
role Baz does Bar is export {}
role Bazz does Foo::Bar is export {}
}

import Foo;
import Quux;

# these are all the same:
say Foo::EXPORT::ALL::Bar.WHICH;
say Quux::Barr.WHICH;
say Bar.WHICH;

# but different from our original type object!?!
say Foo::Bar.WHICH;

# now it gets weird:
say Baz ~~ Bar; # True
say Baz.new ~~ Bar; # False
say Baz ~~ Foo::Bar; # False
say Baz.new ~~ Foo::Bar; # True

# however, these all 'work':
say Bazz ~~ Bar; # True
say Bazz.new ~~ Bar; # True
say Bazz ~~ Foo::Bar; # True
say Bazz.new ~~ Foo::Bar; # True

目前,最好只从另一个模块角色的完全合格的公共(public)版本而不是导出的角色中派生新角色:导出似乎创建了一个新的类型对象,它与智能匹配/类型检查奇怪地交互......

关于raku - 在两个模块之间使用角色时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52245858/

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