变量的声明和赋值:静默删除指定的值

时间:2018-05-24 11:02:34

标签: variable-assignment perl6 variable-declaration raku

你可以在Perl 6中declare a list of variables and assign them some value

my ($a, $b) = 33,44 # $a will be 33 and $b 44

但是,如果您尝试在变量声明后分配值,则将以静默方式删除值

my ($a = 44, $b = 33); 
say $a, $b; #OUTPUT: «(Any)(Any)␤» 

从那里开始变得更奇怪了,因为

 my ($a = 44, $b);

失败了:

===SORRY!=== Error while compiling /tmp/G7JgLMe1Wq
Cannot put required parameter $b after optional parameters

my ($a, $b = 33);

将与将它们中的任何一个分配在一起具有相同的结果。

这种行为让我感到困惑。它应该发出警告吗?第一个表达式是否也会产生与可选参数相同的错误?我们应该将其记录为trap吗?以上所有?

1 个答案:

答案 0 :(得分:9)

通过了解除了赋值语法之外,还可以理解行为,还有签名绑定语法,其中左侧基本上具有签名中参数的所有特征(减去几个NIY特征):

-700x700.jpg

所以会发生什么是声明具有默认值的可选参数。这就是你后面的例子讨论所需参数的原因;在常规签名中,您不能在选项之后提出要求。但是,由于您实际上没有执行任何绑定,因此变量仍未分配。

  

将被默默地删除

我们可以实现一些启发式方法来检测这种情况,并在LHS看起来像签名案例并且缺少初始化程序时警告用户。将其归档为R#1864