你可以在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吗?以上所有?
答案 0 :(得分:9)
通过了解除了赋值语法之外,还可以理解行为,还有签名绑定语法,其中左侧基本上具有签名中参数的所有特征(减去几个NIY特征):
-700x700.jpg
所以会发生什么是声明具有默认值的可选参数。这就是你后面的例子讨论所需参数的原因;在常规签名中,您不能在选项之后提出要求。但是,由于您实际上没有执行任何绑定,因此变量仍未分配。
将被默默地删除
我们可以实现一些启发式方法来检测这种情况,并在LHS看起来像签名案例并且缺少初始化程序时警告用户。将其归档为R#1864。