首页 > 解决方案 > 在两个模块之间使用角色时出现问题

问题描述

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

例如我们有两个模块 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 并拒绝编译。

这里有什么问题?

标签: raku

解决方案


foo后面的符号import不是=:=Foo::foo也不接受智能匹配中的后者。这对我来说似乎是一个错误,并且可能与正在发生的事情有关:

module Foo {
  role foo is export { }
  .say for foo.^name, Foo::foo.^name,
           Foo.WHICH, foo.WHICH, Foo::foo.WHICH,
           foo.isa(Foo::foo),
           Foo::foo.isa(foo),
           foo.does(Foo::foo),
           Foo::foo.does(foo),
           foo ~~ Foo::foo,
           Foo::foo ~~ foo,
}
import Foo;
.say for foo.^name, Foo::foo.^name,
         Foo.WHICH, foo.WHICH, Foo::foo.WHICH,
         foo.isa(Foo::foo),
         Foo::foo.isa(foo),
         foo.does(Foo::foo),
         Foo::foo.does(foo),
         foo ~~ Foo::foo,
         Foo::foo ~~ foo,

Foo::foo
Foo::foo
Foo|U64545472
Foo::foo|U64545856
Foo::foo|U64545856
False
False
True
True
True
True
Foo::foo
Foo::foo
Foo|U64545472         <^-- all good so far
Foo::foo|U64545616    <--- uhoh
Foo::foo|U64545856
False
False
True
True
True
False                 <-- presumably a consequence of uhoh

如果没有人超过我并且没有人说明为什么它不是错误,我将在接下来的几天内提交错误。


推荐阅读