A *
表示「所有剩餘參數」。 _
只是另一個變量名稱,儘管它有點特別。因此,他們是不同的,例如下面的無厘頭:
[[1, 2, 3], [4, 5, 6]].each{|*, x, *| p x} # Syntax error
事實上,如何紅寶石應該知道如果第一個明星應該得到的值(和反向)的0,1或2?
很少有情況下,您想使用星號來忽略參數。一個例子是,如果你只想使用的參數變量號的最後:
紅寶石讓你不給參數的「休息」起一個名字,但你可以使用_
:
[[1], [2, 3], [4, 5, 6]].each{|*_, last| p last} # => prints 1, 3 and 6
通常,參數的數量是已知的,您最好的選擇是使用_
:
[[1, 2, 3], [4, 5, 6]].each{|_, mid, _| p mid} # prints 2 and 5
注意,你可以離開的最後paramater烏納MED,雖然它是不太明顯的過(當使用一個*
狀即可):
[[1, 2, 3], [4, 5, 6]].each{|_, mid, | p mid} # prints 2 and 5
現在_
是使用,當你不希望使用的值指定變量名。這有兩個原因一個特殊的變量名:
- ,如果你不使用它(如果警告是上)紅寶石不會抱怨
- 紅寶石將允許您重複它在參數列表中。點1的
實施例:
> ruby -w -e "def foo; x = 42; end; foo"
-e:1: warning: assigned but unused variable - x
> ruby -w -e "def foo; _ = 42; end; foo"
no warning
點2的實施例:
[[1, 2, 3], [4, 5, 6]].each{|unused, mid, unused| p mid}
# => SyntaxError: (irb):23: duplicated argument name
[[1, 2, 3], [4, 5, 6]].each{|_, mid, _| p mid}
# => prints 2 and 5
最後,如@DigitalRoss筆記,_
保持最後的結果在irb
更新:在Ruby 2.0中,您可以使用任何以0123開頭的變量來表示它是未使用的。通過這種方式,變量名可以更加明確被忽視了:
_scheme, _domain, port, _url = parse_some_url
# ... do something with port
感謝您的詳細解答。這個答案有我想要的所有信息。 – sawa 2012-01-01 04:25:36