匿名容器
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
, 并且 绑定 a
到 Scalar
1:
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.
定义一个变量$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
, 并且 绑定 a
到 Scalar
1:
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.