跳轉至內容

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
華夏公益教科書