我最近遇到的圖示操作的這個例子:不止一次在一邊
first, *, last = 1, 2, *[3,4,5]
和它的工作。
所以我想知道,你可以在左邊還是右邊多次使用摔跤運算符?每次我這樣做,我都會收到意想不到的明星錯誤,但只是想知道它的問題。
我最近遇到的圖示操作的這個例子:不止一次在一邊
first, *, last = 1, 2, *[3,4,5]
和它的工作。
所以我想知道,你可以在左邊還是右邊多次使用摔跤運算符?每次我這樣做,我都會收到意想不到的明星錯誤,但只是想知道它的問題。
在左側不能有多個圖示。 (至少不在同一層次的嵌套。)畢竟,它意味着「吞噬所有值」,那麼兩個splats甚至意味着什麼?這只是沒有意義。
注:這樣的事情當然是可能的:
a, *b, (c, *d) = [1, 2, 3, [4, 5, 6]]
兩個潑濺在不同層次的嵌套,他們不互相干擾。
而就在右手邊,有沒有問題或者:
a = 1, 2, *[3, 4], *[5, 6]
這只是意味着擴張,而且也沒有在右手邊擴大多個陣列的問題。
在一側(左側或右側),您可以使用圖示(*
)只有一次。 first, *, last
- 在這裏>,一個*
1,2,* [3,4,5] - >在這裏,這是相同的
但是你可以多次使用圖示運營商更多,如果你使用模式匹配(!)(不知道是否Ruby調用它的方式雖然,但在其他語言類似的功能被稱爲這樣,所以我會用這個詞):
a, *b, (*c, d) = 1, 2, 4, 5, 6, [7, 8, 9, 10, 11]
#=> [1, 2, 4, 5, 6, [7, 8, 9, 10, 11]]
a
#=> 1
b
# => [2, 4, 5, 6]
c
# => [7, 8, 9, 10]
d
# 11
正如你可以看到我用圖示運營商b和C變量。這種情況下的括號是前面提到的模式匹配。 Here你可以讀一點關於這個。
總結無模式匹配(()
)您可以使用它一次。
隨着模式匹配,你可以一次使用它每()
(模式匹配)
PS。 *
在*[1,2,3]
不能用作分配,所以你可以用它幾次:
a = *[1,2,3], *[4,5,6]
# => [1, 2, 3, 4, 5, 6]
什麼語言稱爲模式匹配? –
@ the-tin-man例如,haskell。 –
*這樣的事*我不知道怎麼紅寶石調用它,但在其他語言中,它被稱爲「模式匹配」。我在回答中寫了一些關於它的信息(並將鏈接)。 –
@DarekNędza:Ruby稱之爲*並行賦值*,它是一種*解構綁定*形式。模式匹配比簡單的解構綁定更*強大。 –
* bind *表示什麼? –