raku - 在 Perl 6 中是导出和绑定
问题描述
:=
为什么没有导出具有绑定的变量的值?
$ 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?
解决方案
一个our
-scoped 变量实际上只是一个词法变量(如my
),它 - 而不是Scalar
每个范围新创建的 - 通过绑定到Stash
当前包中该名称的符号来初始化。如此有效,这:
our $foo;
正在这样做:
my $foo := $?PACKAGE.WHO<$foo>;
所以:
our $foo = 42;
正在这样做:
(my $foo := $?PACKAGE.WHO<$foo>) = 42;
因此,重新绑定符号意味着它不再与Scalar
存储在Stash
.
导出一个our
-scoped 变量会Scalar
从该变量在范围进入时绑定到的存储中导出容器。因此,分配分配到该导出的Scalar
容器中。相比之下,绑定将词汇替换为完全不同且与导出的内容无关的东西。
这就是为什么不允许导出my
-scoped 变量的原因:Scalar
每个范围条目都绑定了一个新变量,但导出是编译时的事情,因此无法修改导出的内容。
推荐阅读
- html - 我的桌子之间不断出现空白行
- c++ - C++ 参数包类型扩展
- laravel - 在 laravel 中从同一个控制器方法创建两个关系
- python - 需要从字符串的抓取列表中获取浮点值以用于基本 if 语句
- .htaccess - 重定向 pdf 文件 .htaccess
- r - 如何使用 dplyr 在行组之间进行划分
- swift - Swift 文本框问题
- javascript - 使用 JavaScript 时烧瓶 request.get_json(force=True) 只会引发 BadRequest?
- r - 聚类方法比较:R 编程中的分层与潜在类分析
- javascript - 输入轮廓 css