变量赋值

4

需要将变量a、b、c和d都设置为“foo”。

有没有一种方法可以通过一次性赋值来实现这个目标?像这样:

a、b、c、d = 'foo'

4个回答

14

参考this,最好的方式是按照需要将共同值分配给所有变量。

a= b= c = d = 'foo'

对于不同的值,你可以这样做

a, b, c, d = 'foo1', 'foo2', 'foo3', 'foo4'

5
也就是说:a, b, c, d = ["foo"] * 4 的意思是将字符串 "foo" 赋值给变量 a、b、c 和 d。 - Joseph Yaduvanshi

3
我相信Ruby支持普通类型的链式赋值,例如:
a = b = c = d = 'foo'

24
请注意,这会将所有变量指向内存中相同的实际字符串。因此,如果您接下来执行 a.reverse! ,那么 a、b、c 和 d 都将变成 'oof'。 - PreciousBodilyFluids

0

这似乎是最安全的方式:

a, b, c, d = 4.times.map{'foo'}

这个与之类似,但稍微短一点:

a, b, c, d = (1..4).map{'foo'}

使用这种方式可能比使用数组乘法器或链式赋值更长,但是这样你实际上会得到不同的对象,而不是对同一对象的不同引用。

验证码:

[a,b,c,d].map(&:object_id)

如果object_id相同,则您的变量引用相同的对象,而变异方法(例如sub!)将影响所有4个变量看到的内容。如果它们不同,则可以改变一个而不影响其他变量。

0
a = b = c = d = 'foo'

这绝对是正确的方法...如果你想要一个有点奇怪的方式:

a,b,c,d = %w{foo}*4

(%w{foo} 返回一个包含 foo 的字符串数组,*4 将该数组乘以 4,因此您将得到一个包含 4 个 foo 字符串的数组,并且您可以将该数组分配给多个逗号分隔的变量名)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接