跳转至内容

Raku 编程/元运算符

来自 Wikibooks,开放世界中的开放书籍

元运算符

[编辑 | 编辑源代码]

运算符对数据进行操作。元运算符对运算符进行操作。

列表运算符

[编辑 | 编辑源代码]

归约运算符

[编辑 | 编辑源代码]

归约运算符作用于列表并返回标量值。它们通过在数组中每对元素之间应用归约运算符来实现这一点。

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
华夏公益教科书