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