之间是否存在差异:
1
> lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
=> [0, 0, 0, 0]
2
> lines, codelines, total_lines, total_codelines = 0
=> 0
如果是,那么在什么情况下应该使用哪一个?
[编辑] 还有第三种方式:
lines = codelines = total_lines = total_codelines = 0
> lines = codelines = total_lines = total_codelines = 0
=> 0
irb(main):016:0> lines
=> 0
irb(main):017:0> codelines
=> 0
irb(main):018:0> total_lines
=> 0
irb(main):019:0> total_codelines
如果是数组
0> a = b = { }; a[:a] = 6
=> 6
irb(main):023:0> b = 3
=> 3
irb(main):024:0> a
=> {:a=>6}
irb(main):025:0> a = 10
=> 10
irb(main):026:0> b
=> 3
> a.object_id
=> 21
irb(main):028:0> b.object_id
=> 7
答案 0 :(得分:2)
这两者之间的区别在于第二个示例仅将0
分配给lines
。
lines, codelines, total_lines, total_codelines = 0,0,0,0
codelines #=> 0
而当并行分配中的右值数量小于左值数量时:
lines, codelines, total_lines, total_codelines = 0
codelines #=> nil
剩余价值分配为nil
因此,除非您需要在特定范围内使用nil
初始化变量,否则第二种类型的并行赋值实际上没有意义;例如,迭代之外的计数器。
答案 1 :(得分:1)
有区别。
1
lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
右侧有多个值,左侧有变量。每个值都将分配给每个变量。
2
lines, codelines, total_lines, total_codelines = 0
在右侧没有与左侧有变量一样多的值。缺失值将补充为nil
。 lines
将成为0
,其余的将成为nil
。没有理由你应该使用这样的作业。
当您想要在右侧使用数量较少的多个变量时,典型的情况是当您拥有一个不知道它有多少元素的数组时。
a, b, *c = some_array
在上述情况中,根据some_array
的长度,a
,b
,c
会分配不同的内容。