匿名容器

时间:2016-05-23 02:31:05

标签: perl6

定义变量$a

my $a = 123;

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

my \b = $a;

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

b = 234;

say $a;

应显示234

我的理解是有效的,因为b设置为与$a相关联的容器。

有没有办法定义匿名容器?即像这样的东西:

my \b = container(123);

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

b = 234;

2 个答案:

答案 0 :(得分:3)

$是一个匿名Scalar容器(ETA:state

注意!! 我的解决方案"在这个答案中反映了破碎的思想,正如我在@BradGilbert交流中所揭示的那样。我可能有一天会删除这个答案但是现在我只是在上面的标题中添加了 state 限定符/链接,这个希望足够响亮的段落。

my \a = $ = 123;
say a;                     # 123

a = 100;
a--;
say a;                     # 99

my \list  = (1,2,3);       # assign to anon List container
say list >>+>> a;          # (100,101,102)

my \array = [1,2,3];       # assign to anon Array container
array[2] = 42;
say array;                 # [1 2 42]

a = array[1];              # assign to anon Scalar within Array
a = "yep";
say array;                 # [1 yep 42]

my \hash  = {:a, :b, :c};  # assign to anon Hash container
say hash<b>;               # True

# etc.

答案 1 :(得分:0)

这似乎是一种分配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

相关问题