gpt4 book ai didi

raku - 在 Perl 6 中是导出和绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 05:48:03 25 4
gpt4 key购买 nike

为什么变量的值不是 :=绑定(bind)导出?

$ 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每个作用域新创建的 - 通过绑定(bind)到 Stash 中该名称的符号来初始化当前包的。如此有效,这:

our $foo;

正在这样做:
my $foo := $?PACKAGE.WHO<$foo>;

所以:
our $foo = 42;

正在这样做:
(my $foo := $?PACKAGE.WHO<$foo>) = 42;

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

导出 our -范围变量导出 Scalar变量在范围进入时绑定(bind)到的存储中的容器。因此,分配分配给导出的 Scalar容器。相比之下,绑定(bind)将词汇替换为完全不同且与导出的内容无关的东西。

这就是为什么不允许您导出 my 的原因。 -作用域变量:一个新的 Scalar绑定(bind)了每个范围条目,但导出是编译时的事情,因此无法修改导出的内容。

关于raku - 在 Perl 6 中是导出和绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60397320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com