Raku 编程/元运算符
外观
< Raku 编程
运算符对数据进行操作。元运算符对运算符进行操作。
归约运算符作用于列表并返回标量值。它们通过在数组中每对元素之间应用归约运算符来实现这一点。
my @nums = 1..5;
my $sum = [+] @nums # 1 + 2 + 3 + 4 + 5
[ ]
方括号将任何通常作用于标量的运算符转换为归约运算符,以对列表执行相同的操作。归约运算符也可以与关系运算符一起使用。
my $x = [<] @y; # true if all elements of @y are in ascending order
my $z = [>] @y; # true if all elements of @y are in descending order
归约运算符将运算符应用于数组中的所有元素,并将其归约为单个标量值。超运算符将操作分布在列表中的所有元素上,并返回所有结果的列表。超运算符使用特殊的“法语引号”符号构建:« 和 »。如果你的键盘不支持这些符号,你可以使用 ASCII 符号 >>
和 <<
代替。
my @a = 1..5;
my @b = 6..10;
my @c = @a »*« @b;
# @c = 1*6, 2*7, 3*8, 4*9, 5*10
你也可以将一元运算符与超运算符一起使用。
my @a = (2, 4, 6);
my @b = -« @a; # (-2, -4, -6)
一元超运算符始终返回一个与它接收的列表大小完全相同的数组。中缀超运算符的行为取决于其操作数的大小。
@a »+« @b; # @a and @b MUST be the same size
@a «+« @b; # @a can be smaller, will upgrade
@a »+» @b; # @b can be smaller, will upgrade
@a «+» @b; # Either can be smaller, Perl will Do What You Mean
超运算符符号指向不同的方向会影响 Raku 对元素的处理方式。在尖锐的一侧,它会扩展数组,使其与钝的一侧一样长。如果两侧都尖锐,它会扩展较小的那一方。
超运算符也可以与赋值运算符一起使用。
@x »+=« @y # Same as @x = @x »+« @y
交叉是一个大写的 X
符号。作为运算符,交叉返回一个列表,其中包含由其操作数元素组合而成的所有可能的列表。
my @a = 1, 2;
my @b = 3, 4;
my @c = @a X @b; # (1,3), (1,4), (2,3), (2,4)
交叉也可以用作元运算符,对每个操作数中元素的每种可能组合应用它修饰的运算符。
my @a = 1, 2;
my @b = 3, 4;
my @c = @a X+ @b; # 1+3, 1+4, 2+3, 2+4