我想,结果应该是1, 2, 3.
> my ($a, $b, $c)
> (($a, $b), $c) = ((1, 2), 3)
(((1 2) 3) (Any))
> $a, $b, $c
((1 2) 3 (Any))
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
没有什么不对(也就是说,P6中的普通任务是按照它所做的那样设计的),但是猜测你希望在两侧使结构相同会导致$a获得1,$b获得2和$c获得3.
为此,你想要"绑定赋值"(又名"绑定"),而不是普通的赋值:
my ($a, $b, $c);
:(($a, $b), $c) := ((1, 2), 3);
Run Code Online (Sandbox Code Playgroud)
注意左边列表前面的冒号,使它成为签名文字,然后是冒号=,使其成为绑定操作.
如果你想得到结果1, 2, 3,你必须Slip列出:
my ($a, $b, $c) = |(1, 2), 3;
Run Code Online (Sandbox Code Playgroud)
这是单一参数规则的结果:https://docs.perl6.org/type/Signature#Single_Argument_Rule_Slurpy
这也是为什么这只是有效的原因:
my ($a, $b, $c) = (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
即使(1,2,3)是List3个元素,由于相同的单个参数规则,它将自动滑动.您当然也可以删除(迷信)括号:
my ($a, $b, $c) = 1, 2, 3;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |