分配多个variables如a = b = c = d = 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, 5, 5, 5 

这里需要注意的是,你的情况只能工作,因为数字在Ruby中是不可变的。 你不想用string,数组,哈希或数字以外的其他东西来做到这一点,因为它会创build多个引用到同一个对象,这几乎肯定不是你想要的:

 a = b = c = d = "test" b << "x" => "testx" a => "testx" 

而平行forms是安全的所有types:

 a,b,c,d = "test","test","test","test" => ["test", "test", "test", "test"] b << "x" => "testx" a => "test" 

这样分配没有问题( a = b = c = d = 5 )。 如果所有variables都需要具有相同的值,我个人更喜欢多重赋值。

这是另一种方式:

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

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

语言允许,正如你所发现的,它的行为和你所期望的一样。 我build议你应该问自己的唯一问题是expression性:代码告诉你它的目的是什么?

就个人而言,我不特别喜欢使用这个构造,而不是初始化为默认值,最好是零。 理想情况下,如此初始化的variables也都具有类似的用途,例如计数器。 但是如果我有更多的相同目的的variables,我可能会考虑将它们声明为一种重复的forms,例如将其重构为哈希。

这两个初始化expression了不同的含义。 a = b = c = d = 5表示“我的所有variables都应该被初始化为相同的值,并且这个值是5”。 另一个是a, b, c, d = 5, 5, 5, 5意思是“我有一个variables列表,以及相应的init值列表”。

你的逻辑是不是所有的variables都应该一样? 那么第一个更好。 如果不是,第二个可能会更好。 另一个问题:你的4个variables列表是否全面? 是否有可能会添加或删除另一个variables到这个组? 如果是这样,我会build议另一个变种:

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

我曾经被那一个咬了。 它今天可以为您节省一些键盘input,但稍后您可能会咬你。 正如@glenn所提到的,它创build了多个对同一个对象的引用。

例如:这适用于ruby1.81.9

 > a = b = Array.new => [] > a.object_id == b.object_id => true > a << 1 => [1] > b << 2 => [1, 2] 

我根本不使用ruby,所以这可能是一个可以接受的习惯用法,但a = b = c = d = 5对我来说看起来相当丑陋。 a , b, c, d = 5, 5, 5, 5 5,5,5,5看起来好多了,IMO。