HyperWhatever
在功能上与 Whatever
非常相似。不同之处在于 HyperWhatever
代表多个值,而不是单个值。
独立术语§
就像 Whatever
一样,如果 HyperWhatever
被用作一个独立的术语,则不进行准备,并且 HyperWhatever
对象将按原样使用
sub foo ()foo **; # OUTPUT: «HyperWhatever»
您可以在自己的例程中选择将此类值解释为代表多个值。在核心部分,HyperWhatever
可以与 List
智能匹配时使用此含义
say (1, 8) ~~ (1, **, 8); # OUTPUT: «True»say (1, 2, 4, 5, 6, 7, 8) ~~ (1, **, 8); # OUTPUT: «True»say (1, 2, 8, 9) ~~ (1, **, 8); # OUTPUT: «False»
HyperWhatever
出现在右侧列表中的任何位置都表示任意数量的元素都可以填充智能匹配列表中的该空间。
准备§
在准备方面,HyperWhatever
遵循与 Whatever
相同的规则。唯一的区别是 HyperWhatever
产生一个 Callable
,其签名为 *@
slurpy
say (**²)(1, 2, 3, 4, 5); # OUTPUT: «(1 4 9 16 25)»
HyperWhatever
闭包可以想象为一个 WhateverCode
,其周围又包裹着一个子例程,它只是将参数中的每个元素映射过来
my = sub (*)say hyper-whatever(1, 2, 3, 4, 5); # OUTPUT: «(1 4 9 16 25)»
在准备时,不允许将 HyperWhatever
与 Whatever
混合使用。