在 Supply 中§

有关方法 squish,请参阅上下文中的主要文档

method squish(Supply:D: :$as:$with --> Supply:D)

创建一个仅提供唯一值的供应,由可选的 :as:with 参数定义(与 squish 相同)。

在 Any 中§

有关方法 squish,请参阅上下文中的主要文档

multi method squish:&as!:&with = &[===] )
multi method squish:&with = &[===] )

类似于 .repeated,返回相等元素的连续序列的第一个元素的序列,如果存在,则按函数 :as 规范化,并使用相等运算符 :with 参数或默认情况下使用 ===

"aabbccddaa".comb.squish.say;             # OUTPUT: «(a b c d a)␤» 
"aABbccdDaa".comb.squish:as(&lc) ).say# OUTPUT: «(a B c d a)␤» 
(3+2i,3+3i,4+0i).squishas => *.rewith => &[==]).put# OUTPUT: «3+2i 4+0i␤» 

如最后一个示例所示,序列可以包含一个元素。有关其他 sub 示例,请参阅 squish

在独立例程中§

有关例程 squish,请参阅上下文中的主要文档

sub squish+values|c)

从调用方/参数列表中返回一个值序列,其中一个或多个值的运行仅替换为第一个实例。与 unique 一样,squish 使用 === 运算符的语义来决定两个对象是否相同。与 unique 不同,此函数仅删除相邻的重复项;间隔较远的相同值仍保留。即使删除了重复项,也会保留原始列表的顺序。

示例

say <a a b b b c c>.squish# OUTPUT: «(a b c)␤» 
say <a b b c c b a>.squish# OUTPUT: «(a b c b a)␤»

可选的 :as 参数与 unique 一样,允许在比较之前临时转换值。

可选的 :with 参数用于设置适当的比较运算符

say [42"42"].squish;                      # OUTPUT: «(42 42)␤» 
# Note that the second item in the result is still Str 
say [42"42"].squish(with => &infix:<eq>); # OUTPUT: «(42)␤» 
# The resulting item is Int