当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否应该自动导入模块文件中的常量?》经验,为你挑选了1个好方法。

给定模块文件test.pm6:

constant $AUTHOR='me';

和剧本test_script.p6:

use lib '.';

use test;

my $AUTHOR = 'someone';

我编译检查时收到以下警告test_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.



1> 小智..:

这不是一个错误.our默认情况下,常量是作用域的,你的常量test.pm6仍然在主线中,因此放入GLOBAL命名空间,因为它是一个our,它在主脚本中可见.

避免它的一种方法是你发现:使用myon常量/类(默认为our).或者相反,使用our要使其可见的on子例程/变量(作为subs默认值my).

另一种方法是使用,比如说,unit module BlahBlah;在模块文件的顶部,然后这些符号将在BlahBlah命名空间中,而不是在GLOBAL主菜单中直接可见(our符号仍然可以访问BlahBlah::whatever)

PS:2016年Rakudos上的那些因为词汇模块加载错误而不会观察到这种行为,这个错误仅在2017.01编译器版本中得到修复(并且在2016.12编译器发布后的几天内被合并到掌握)

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有