Ruby on rails 像这样分配多个变量a=b=c=d=5对吗?

Ruby on rails 像这样分配多个变量a=b=c=d=5对吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我发现这样的赋值没有问题。我的问题是,应该像上面给出的那样分配还是像这样分配 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

我发现这样的赋值没有问题。我的问题是,应该像上面给出的那样分配还是像这样分配

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=5
在我看来非常难看<代码>a、b、c、d=5、5、5、5看起来好多了,我想。

如果感觉不错,就去做

正如您所发现的,语言允许它,并且它的行为符合您的预期。我建议,您应该问自己的唯一问题是关于表达能力:代码是否告诉您其目的是什么


就我个人而言,除了初始化为默认值(最好是零)之外,我并不特别喜欢使用这个构造。理想情况下,这样初始化的变量也都有类似的用途,例如计数器。但是,如果我有两个以上类似的变量,我很可能会把它们声明为一个重复的形式,将它们重新分解成一个哈希。

< P>这两个初始化表示不同的含义。
a=b=c=d=5
表示“我所有的变量都应该初始化为相同的值,这个值是5”。另一个,
a,b,c,d=5,5,5
,表示“我有一个变量列表和相应的初始值列表”

你的逻辑是不是所有的变量都应该是一样的?那么第一个更好。如果不是,第二个可能更好。另一个问题:你列出的4个变量是否全面?您是否可能向该组添加或删除另一个变量?如果是这样的话,我建议另一种变体:

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

这里需要注意的是,您的案例只能正常工作,因为数字在Ruby中是不可变的。您不希望对字符串、数组、散列或数字以外的任何对象执行此操作,因为它会创建对同一对象的多个引用,而这几乎肯定不是您想要的:

a = 5
b = 5
c = 5
d = 5
a=b=c=d=“测试”
b“testx”
A.
=>“testx”
鉴于平行形式适用于所有类型:

a = b = c = d = "test"
b << "x"
=> "testx"
a
=> "testx"
a、b、c、d=“测试”、“测试”、“测试”、“测试”
=>[“测试”、“测试”、“测试”、“测试”]
b“testx”
A.
=>“测试”

我曾经被那只咬过。它今天可能会帮你省下几次击键,但稍后会咬你。正如@glenn所提到的,它创建了对同一对象的多个引用

示例:这适用于ruby
1.8
1.9

a,b,c,d = "test","test","test","test"
=> ["test", "test", "test", "test"]
b << "x"
=> "testx"
a
=> "test"
>a=b=Array.new
=> []
>a.object\u id==b.object\u id
=>正确
>a[1]
>b[1,2]

五件事加四个变量?@Donal:Oops。我想这对没人想要的那5个人来说是很卑鄙的(+1,这是正确的答案。我不确定哪种形式更惯用,但我只能想到需要这样一个赋值的少数情况。你上面的例子对
nil
true
false
:)5,5,5,5不是太多重复?@ArnoldRoa它比[5]*4更易于维护,对于您计划用作常数的任何字符串,可以这样做,对吗?您可以将其进一步干燥:
a,b,c,d=%w(test)*4
> a = b = Array.new
=> []
> a.object_id == b.object_id
=> true
> a << 1
=> [1]
> b << 2
=> [1, 2]