a = b = c = d = 5
puts (a) >> 5
puts (b) >> 5
puts (b) >> 5
puts (b) >> 5
a= a+1
puts (a) >> 6
puts (b) >> 5
我發現這樣的值的分配沒有問題。我的問題是應該像上面給出的那樣分配還是像這樣?這樣分配多個變量是否正確a = b = c = d = 5?
a , b, c, d = 5, 5, 5, 5
a = b = c = d = 5
puts (a) >> 5
puts (b) >> 5
puts (b) >> 5
puts (b) >> 5
a= a+1
puts (a) >> 6
puts (b) >> 5
我發現這樣的值的分配沒有問題。我的問題是應該像上面給出的那樣分配還是像這樣?這樣分配多個變量是否正確a = b = c = d = 5?
a , b, c, d = 5, 5, 5, 5
的事情要注意的是這裏因爲數字是在Ruby中不變的情況下,你只能確定。你不希望與字符串,數組要做到這一點,散列或其他幾乎任何其他不是數字,因爲它會造成多個引用同一個對象,這是幾乎可以肯定不是你想要的東西:
a = b = c = d = "test"
b << "x"
=> "testx"
a
=> "testx"
而並行的形式與所有類型的安全:
a,b,c,d = "test","test","test","test"
=> ["test", "test", "test", "test"]
b << "x"
=> "testx"
a
=> "test"
thanx glenn非常有用:) – Salil 2010-05-29 09:40:58
對於你打算用作常量的任何字符串來說,這樣做應該沒問題吧? – 2015-02-19 21:37:49
你可以進一步烘乾它:'a,b,c,d =%w(test)* 4' – nerfologist 2016-12-16 10:25:26
這樣分配沒有問題(a = b = c = d = 5
)。如果所有變量都需要具有相同的值,我個人更喜歡多次賦值。
這裏的另一種方式:
a, b, c, d = [5] * 4
五件事四個變量? – 2010-05-28 13:36:53
@Donal:糟糕。我想這是多餘的5人沒有人想要的。 :( – 2010-05-28 13:51:34
我不使用紅寶石好,所以這可能是一個可接受的成語,但a = b = c = d = 5
看起來很醜我。國際海事組織,a , b, c, d = 5, 5, 5, 5
看起來好多了。
5,5,5,5是不是太多重新編制? – 2014-02-21 15:04:37
@ArnoldRoa它比[5] * 4,IMO – drusepth 2014-03-28 12:48:04
如果感覺良好,就去做吧。
語言允許它,因爲你發現,它的行爲和你所期望的一樣。我建議你應該問自己的唯一問題是表達性:代碼告訴你它的目的是什麼?
就我個人而言,我並不特別喜歡使用這個構造,而不是初始化爲默認值,最好是零。理想情況下,初始化的變量都會有類似的用途,例如計數器。但是如果我有更多的類似用途的變量,我可能會考慮將它們聲明爲一種重複的形式,並將其重構爲例如哈希。
+1稍微更易於維護,這是正確的答案。我不確定哪個表單更多習慣性的,但我只能想到在這種情況下需要這樣一個任務的情況。 – 2010-05-28 13:49:23
這兩個初始化表示不同的含義。 a = b = c = d = 5
表示「我的所有變量都應該初始化爲相同的值,並且此值爲5」。另一個,a, b, c, d = 5, 5, 5, 5
,意思是「我有一個變量列表,以及相應的init值列表」。
是你的邏輯,所有的變量應該總是相同的?然後第一個更好。如果不是,第二個可能會更好。另一個問題:你的4個變量列表是否全面?是否可能會向該組添加或刪除另一個變量?如果是的話,我建議另一種變型,而不是:
a = 5
b = 5
c = 5
d = 5
一次,我被咬有一個。它今天可以爲你節省一些鍵盤輸入,但稍後你會咬你。正如@glenn所提到的,它創建了多個對同一個對象的引用。
例如:這適用於紅寶石1.8
和1.9
> a = b = Array.new
=> []
> a.object_id == b.object_id
=> true
> a << 1
=> [1]
> b << 2
=> [1, 2]
你上面的例子中也能很好的完成''nil'和TRUE''FALSE' :) – MMachinegun 2014-02-13 11:42:29