2010-05-28 34 views
45
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 
+1

你上面的例子中也能很好的完成''nil'和TRUE''FALSE' :) – MMachinegun 2014-02-13 11:42:29

回答

87

的事情要注意的是這裏因爲數字是在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" 
+0

thanx glenn非常有用:) – Salil 2010-05-29 09:40:58

+0

對於你打算用作常量的任何字符串來說,這樣做應該沒問題吧? – 2015-02-19 21:37:49

+2

你可以進一步烘乾它:'a,b,c,d =%w(test)* 4' – nerfologist 2016-12-16 10:25:26

8

這樣分配沒有問題(a = b = c = d = 5)。如果所有變量都需要具有相同的值,我個人更喜歡多次賦值。

這裏的另一種方式:

a, b, c, d = [5] * 4 
+0

五件事四個變量? – 2010-05-28 13:36:53

+3

@Donal:糟糕。我想這是多餘的5人沒有人想要的。 :( – 2010-05-28 13:51:34

0

我不使用紅寶石好,所以這可能是一個可接受的成語,但a = b = c = d = 5看起來很醜我。國際海事組織,a , b, c, d = 5, 5, 5, 5看起來好多了。

+0

5,5,5,5是不是太多重新編制? – 2014-02-21 15:04:37

+0

@ArnoldRoa它比[5] * 4,IMO – drusepth 2014-03-28 12:48:04

6

如果感覺良好,就去做吧。

語言允許它,因爲你發現,它的行爲和你所期望的一樣。我建議你應該問自己的唯一問題是表達性:代碼告訴你它的目的是什麼?

就我個人而言,我並不特別喜歡使用這個構造,而不是初始化爲默認值,最好是零。理想情況下,初始化的變量都會有類似的用途,例如計數器。但是如果我有更多的類似用途的變量,我可能會考慮將它們聲明爲一種重複的形式,並將其重構爲例如哈希。

+0

+1稍微更易於維護,這是正確的答案。我不確定哪個表單更多習慣性的,但我只能想到在這種情況下需要這樣一個任務的情況。 – 2010-05-28 13:49:23

4

這兩個初始化表示不同的含義。 a = b = c = d = 5表示「我的所有變量都應該初始化爲相同的值,並且此值爲5」。另一個,a, b, c, d = 5, 5, 5, 5,意思是「我有一個變量列表,以及相應的init值列表」。

是你的邏輯,所有的變量應該總是相同的?然後第一個更好。如果不是,第二個可能會更好。另一個問題:你的4個變量列表是否全面?是否可能會向該組添加或刪除另一個變量?如果是的話,我建議另一種變型,而不是:

a = 5 
b = 5 
c = 5 
d = 5 
3

一次,我被咬有一個。它今天可以爲你節省一些鍵盤輸入,但稍後你會咬你。正如@glenn所提到的,它創建了多個對同一個對象的引用。

例如:這適用於紅寶石1.81.9

> a = b = Array.new 
=> [] 
> a.object_id == b.object_id 
=> true 
> a << 1 
=> [1] 
> b << 2 
=> [1, 2] 
相關問題