ruby的并行赋值,通过简单赋值赋予相同的值

时间:2013-05-06 06:56:51

标签: ruby variable-assignment

之间是否存在差异:

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

2 个答案:

答案 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

在右侧没有与左侧有变量一样多的值。缺失值将补充为nillines将成为0,其余的将成为nil。没有理由你应该使用这样的作业。

当您想要在右侧使用数量较少的多个变量时,典型的情况是当您拥有一个不知道它有多少元素的数组时。

a, b, *c = some_array

在上述情况中,根据some_array的长度,abc会分配不同的内容。