匿名容器

Anonymous containers

定义一个变量$a:

my $a = 123;

定义与 $a 关联的无符号变量:

my \b = $a;

我们可以通过b更改$a的值:

b = 234;

say $a;

那应该显示 234.

我的理解是这样可行,因为 b 设置为与 $a 关联的容器。

有没有办法定义匿名容器? IE。像这样:

my \b = container(123);

由于 b 与容器相关联,分配将像第一个示例中那样工作:

b = 234;

这似乎是一种分配 b 容器的方法,该容器在与 b:

相同范围内没有其他名称
my \b = { my $a = 123; $a; }();

b = 234;

say b;

因此,采用这种方法,container 可以定义如下:

sub container(\val) is rw { my $var = val; $var; }

示例:

my \b = container(123);

b = 234;

say b;

显示 234

您要查找的是 my $ 而不是 my $a

(感谢 @BradGilbert++ 修复了这个答案的第一个版本中的一个非常基本的错误,我建议只使用 $ 而不是 my $;请参阅回复此答案的评论。 )


请注意 =,当用作初始化 sigil 斜杠声明的运算符时,binding (acts the same as :=), not assignment

以下代码声明了一个匿名Scalar容器,分配(复制)123给它1 , 声明一个印记斜杠符号 a, 并且 绑定 aScalar1:

my \a = my $ = 123;
#             *Assigns* 123 to an anonymous Scalar
#      *Binds* a to the anonymous Scalar 
say a;                     # 123
a = 234;
say a;                     # 234

脚注

1 在表达式 foo = bar(赋值)中,惯例是说一个 assigns(副本)一个 手边值(或变量的值)(成)左手variable/container。在表达式 baz := waldo(一个绑定)中,惯例是说一个 绑定 the left hand side symbol/variable 手variable/container/value.