class HyperWhatever { }

HyperWhatever 在功能上与 Whatever 非常相似。不同之处在于 HyperWhatever 代表多个值,而不是单个值。

独立术语§

就像 Whatever 一样,如果 HyperWhatever 被用作一个独立的术语,则不进行准备,并且 HyperWhatever 对象将按原样使用

sub foo ($arg{ say $arg.^name }
foo **# OUTPUT: «HyperWhatever␤»

您可以在自己的例程中选择将此类值解释为代表多个值。在核心部分,HyperWhatever 可以与 List 智能匹配时使用此含义

say (18)                ~~ (1**8); # OUTPUT: «True␤» 
say (1245678~~ (1**8); # OUTPUT: «True␤» 
say (1289)          ~~ (1**8); # OUTPUT: «False␤»

HyperWhatever 出现在右侧列表中的任何位置都表示任意数量的元素都可以填充智能匹配列表中的该空间。

准备§

在准备方面,HyperWhatever 遵循与 Whatever 相同的规则。唯一的区别是 HyperWhatever 产生一个 Callable,其签名为 *@ slurpy

say (**²)(12345); # OUTPUT: «(1 4 9 16 25)␤»

HyperWhatever 闭包可以想象为一个 WhateverCode,其周围包裹着一个子例程,它只是将参数中的每个元素映射过来

my &hyper-whatever = sub (*@args{ map *², @args }
say hyper-whatever(12345); # OUTPUT: «(1 4 9 16 25)␤»

在准备时,不允许将 HyperWhateverWhatever 混合使用。

类型图§

HyperWhatever 的类型关系
raku-type-graph HyperWhatever HyperWhatever Any Any HyperWhatever->Any Mu Mu Any->Mu

展开上面的图表