2014-02-22 60 views
2

以下變量_(下劃線)是Array,foo == "foo"bar == "bar"並行分配中使用下劃線作爲變量

_, foo, bar = ["", "foo", "bar"] 
_ # => ["", "foo", "bar"] 

有人可以解釋下劃線是什麼以及它在哪裏有用嗎?

+0

in'IRB'這個竅門不起作用。在'IRB'中強調它最後是evulatet變量,但是在腳本中它是未使用的變量。這個工作與'IRB'和腳本不同。 –

+0

@Monk_Code它正在爲我工​​作 – Simone

+0

@simone請看完整的評論。 –

回答

4

在平行分配,我們有時會做兩件事情:

  • 忽略一個元素(照顧_

可以重用強調代表任何您不關心的元素:

a, _, b, _, c = [1, 2, 3, 4, 5] 

a # => 1 
b # => 3 
C# => 5 
  • 忽略多個元素(照顧*

要忽略多個元素,使用單星號 - 我要叫它「裸圖示」爲不低於其更好的理由聽起來有點可笑:

a, *, b = [1, 2, 3, 4, 5] 

a # => 1 
b # => 5 

閱讀這篇博客Destructuring assignment in Ruby知道更多其他相關的東西。

2

Underscore是您在此處進行變量分配的簡單佔位符。在你的情況下,它基本上意味着忽略數組中的第一個值。如果我們沒有它,你會這樣做:

ignored, foo, bar = ["", "foo", "bar"] 
=> ["", "foo", "bar"] 

然後不要忽略任何東西。這是更好的使用_

+3

當使用'ruby -w'運行腳本時,腳本不會發出警告。 – steenslag

2

它只是一個像其他任何變量。你可以使用quux或其他任何你喜歡的名字。

除了...你會得到一個關於未使用的局部變量quux的警告,而名稱以_開頭的變量不會收到警告。這是使用_作爲要忽略的變量的名稱的約定編碼。

+0

我不知道的警告事實。謝謝。 –

+0

你可以[看看這個](http://stackoverflow.com/questions/21973537/operator-precedence-of-unary-operators)? –