分配多个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.8
和1.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。