加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:47:26 所属栏目:大数据 来源:网络整理
导读:我正在制作一个具有多模块文件的模块, 在不同模块中使用角色时遇到此问题. 例如,我们有两个模块Foo和Bar,每个模块都有一个角色. module Foo { role foo is export { } }module Bar { import Foo; role bar is export does foo { }} import Foo;import Bar;su
我正在制作一个具有多模块文件的模块,
在不同模块中使用角色时遇到此问题.

例如,我们有两个模块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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读