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

perl6 – 模块文件中的常量是否应该自动导入?

发布时间:2020-12-15 21:42:34 所属栏目:大数据 来源:网络整理
导读:鉴于模块文件test.pm6: constant $AUTHOR='me'; 和脚本test_script.p6: use lib '.';use test;my $AUTHOR = 'someone'; 编译check_script.p6时,我收到以下警告: perl6 -c test_script.p6Potential difficulties: Redeclaration of symbol '$AUTHOR' at te
鉴于模块文件test.pm6:
constant $AUTHOR='me';

和脚本test_script.p6:

use lib '.';

use test;

my $AUTHOR = 'someone';

编译check_script.p6时,我收到以下警告:

perl6 -c test_script.p6
Potential difficulties:
    Redeclaration of symbol '$AUTHOR'
    at test_script.p6:5
    ------> my $AUTHOR? = 'someone';
Syntax OK

但是,只需将test.pm6更改为以下之一就会使此警告消失:

my $AUTHOR='me';

要么

my constant $AUTHOR='me';

那么,问题是应该自动导入常量还是这个bug?

这是在CentOS Linux 7.3.1611版(Core)上安装Rakudo Star 2017.01 Release Candidate 0.

解决方法

这不是一个错误.常量是我们默认的范围,test.pm6中的常量仍然在主线中,因此放入GLOBAL命名空间,因为它是我们的,它在主脚本中可见.

避免它的一种方法是你发现:使用我的常量/类(因为它们默认为我们的).或者相反,使用我们想要显示的子程序/变量(作为默认为我的子程序).

另一种方法是使用单位模块BlahBlah;在模块文件的顶部,然后这些符号将在BlahBlah名称空间而不是在GLOBAL中,因此不会直接在主脚本中显示(我们的符号仍然可以作为BlahBlah :: whatever访问)

P.S.:2016年Rakudos上的那些将不会观察到这种行为,因为lexical module loading bug仅在2017.01编译器版本中得到修复(并且在2016.12编译器发布后的几天内合并到掌握)

(编辑:李大同)

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

    推荐文章
      热点阅读