在兩個單獨的語句中執行賦值的問題是i2 = i1 + i2
將使用新值i1
而不是正確生成斐波那契數列所需的先前值。
當您使用並行賦值時,首先評估右側的所有表達式,然後將其分配給左側的接收變量。
並行分配不是一個特殊的操作符。本質上,右側是數組,如果我們在左側列出多個變量,那麼數組將被解包並分配到相應的變量中。
下面是一些例子:
irb(main):020:0> a = 1, 2 # assign to a single variable
=> [1, 2]
irb(main):021:0> a
=> [1, 2]
irb(main):022:0> a, b = 1, 2 # unpack into separate variables
=> [1, 2]
irb(main):023:0> a
=> 1
irb(main):024:0> b
=> 2
irb(main):025:0> a, b = [1, 2, 3] # 3 is 'lost' as no receiving variable
=> [1, 2, 3]
irb(main):026:0> a
=> 1
irb(main):027:0> b
=> 2
irb(main):028:0> first, *rest = [1, 2, 3] # *rest consumes the remaining elements
=> [1, 2, 3]
irb(main):029:0> first
=> 1
irb(main):030:0> rest
=> [2, 3]
它是紅寶石的一個有用的特徵,例如,它有利於具有例如返回多個值的方法
def sum_and_difference(a, b)
a + b, a - b
end
sum, difference = sum_and_difference 5, 3
在Java中最接近的事就是有一個返回int[]
的方法,但是如果我們想返回一個字符串,以及一些我們需要創建一個小POJO作爲結構的返回值或返回Object[]
,並用代碼將代碼弄亂。請參閱我最近回答的this other question以獲得更實用的示例。
謝謝你mikej !! – bragboy 2010-05-24 09:59:24
您還可以: [1]'* from_first,last = 1,2,3,4' [2a]'* from_first => [1,2,3]' [2b]'last = 4' – funfuntime 2015-02-09 23:00:04