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

perl6 – 在Perl 6中导出和绑定

发布时间:2020-12-15 23:37:39 所属栏目:大数据 来源:网络整理
导读:为什么变量的值不是:=绑定导出? $cat myModule.pm6 our $a is export = 42;our $b is export := $a;$cat program.p6 use myModule;say $a;say $b;$perl6 program.p6 42(Any) # Why? 解决方法 我们的范围变量实际上只是一个词法变量(比如我的) – 而不是每
为什么变量的值不是:=绑定导出?

$cat myModule.pm6 
our $a is export = 42;
our $b is export := $a;

$cat program.p6 
use myModule;
say $a;
say $b;

$perl6 program.p6 
42
(Any)   # Why?

解决方法

我们的范围变量实际上只是一个词法变量(比如我的) – 而不是每个范围新创建的标量 – 通过绑定到当前包的Stash中该名称的符号来初始化.这样有效:

our $foo;

这样做:

my $foo := $?PACKAGE.WHO<$foo>;

所以:

our $foo = 42;

这样做:

(my $foo := $?PACKAGE.WHO<$foo>) = 42;

因此,重新绑定符号意味着它不再与存储在Stash中的Scalar容器相关联.

导出我们的范围变量从范围输入时绑定变量的存储导出Scalar容器.因此,赋值分配到导出的Scalar容器中.相比之下,绑定将词汇替换为完全不同且与导出的内容无关的词汇.

这就是为什么不允许导出my-scoped变量的原因:每个作用域条目都绑定一个新的Scalar,但是导出是一个编译时的东西,所以没有办法修改导出的东西.

(编辑:李大同)

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

    推荐文章
      热点阅读