操作符§

有关前缀 ~,请参见主要文档 在上下文中

multi prefix:<~>(Any --> Str:D)

字符串上下文运算符.

通过调用 Str 方法,将参数强制转换为 Str

操作符§

有关中缀 ~,请参见主要文档 在上下文中

multi infix:<~>(Any,   Any)
multi infix:<~>(Str:DStr:D)
multi infix:<~>(Buf:DBuf:D)
multi infix:<~>(Blob:D $aBlob:D $b)
multi infix:<~>(Junction:D \aJunction:D \b)

这是 字符串连接运算符,它将两个参数都强制转换为 Str 并将它们连接起来。如果两个参数都是 Buf,则返回一个组合缓冲区。

say 'ab' ~ 'c';     # OUTPUT: «abc␤» 
my $bob = Blob.new([1,2,3]);
my $bao = Blob.new([3,4,5]);
say $bao ~ $bob;     # OUTPUT: «Blob:0x<03 04 05 01 02 03>␤» 

当在具有单个元素的数组或列表或仅仅是元素上使用运算符的超版本时,将调用此运算符的 arity-1 版本

say [~Blob.new([3,4,5]);     # OUTPUT: «Blob:0x<03 04 05>␤» 
say [~1|2;                   # OUTPUT: «any(1, 2)␤» 

在连接中§

有关中缀 ~,请参见主要文档 在上下文中

multi infix:<~>(Str:D $aJunction:D $b)
multi infix:<~>(Junction:D $aStr:D $b)
multi infix:<~>(Junction:D \aJunction:D \b)

中缀 ~ 连接可用于将连接合并到单个连接中或将连接与字符串合并。结果连接将具有所有元素,就像将它们合并到嵌套循环中一样

my $odd  = 1|3|5;
my $even = 2|4|6;
 
my $merged = $odd ~ $even;
say $merged# OUTPUT: «any(12, 14, 16, 32, 34, 36, 52, 54, 56)␤» 
 
say "Found 34!" if 34 == $merged# OUTPUT: «Found 34!␤» 
my $prefixed = "0" ~ $odd;
say "Found 03" if "03" == $prefixed# OUTPUT: «Found 03!␤» 
 
my $postfixed = $odd ~ "1";
say "Found 11" if 11 == $postfixed# OUTPUT: «Found 11!␤» 

另一方面,将字符串用作一个参数的 ~ 版本只会将字符串连接到连接的每个成员,从而创建另一个具有相同数量元素的连接。