分配多个变量是正确的a = b = c = d = 5?

Sal*_*lil 55 ruby ruby-on-rails

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
Run Code Online (Sandbox Code Playgroud)

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

a , b, c, d = 5, 5, 5, 5
Run Code Online (Sandbox Code Playgroud)

gle*_*ald 103

这里需要注意的是,你的情况只能正常工作,因为数字在Ruby中是不可变的.您希望使用字符串,数组,哈希或除数字之外的其他任何内容来执行此操作,因为它会创建对同一对象的多个引用,这几乎肯定不是您想要的:

a = b = c = d = "test"
b << "x"
=> "testx"
a
=> "testx"
Run Code Online (Sandbox Code Playgroud)

并行形式对所有类型都是安全的:

a,b,c,d = "test","test","test","test"
=> ["test", "test", "test", "test"]
b << "x"
=> "testx"
a
=> "test"
Run Code Online (Sandbox Code Playgroud)

  • 你可以进一步干它:`a,b,c,d =%w(测试)*4` (2认同)

Fir*_*aad 8

以这种方式分配它是没有错的(a = b = c = d = 5).如果所有变量都需要具有相同的值,我个人更喜欢它.

这是另一种方式:

a, b, c, d = [5] * 4
Run Code Online (Sandbox Code Playgroud)

  • @Donal:哎呀.我想这对于没有人想要的额外5是有意义的.:( (3认同)

Mik*_*use 7

如果感觉良好,那就去做吧.

正如您所发现的那样,语言允许它,并且它的行为与您期望的一样.我建议你应该问自己唯一的问题是表达性:代码是告诉你它的目的是什么?

就个人而言,除了初始化为默认值之外,我并不特别喜欢使用此构造,最好是零.理想情况下,如此初始化的变量都具有类似的目的,例如计数器.但是,如果我有多个类似用途的变量,我可能会考虑将它们声明为一种复制形式,然后重构为例如Hash.