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,但是导出是一个编译时的东西,所以没有办法修改导出的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |