2010-05-28 30 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] 
相关问题