ruby';s并行赋值在简单赋值上赋值相同

ruby';s并行赋值在简单赋值上赋值相同,ruby,variable-assignment,Ruby,Variable Assignment,以下两者之间是否有区别: 一, 二, 如果是,那么在什么情况下应该使用哪种方法 [编辑] 还有第三种方法: 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 =>

以下两者之间是否有区别:

一,

二,

如果是,那么在什么情况下应该使用哪种方法

[编辑] 还有第三种方法:

    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
赋值给

lines, codelines, total_lines, total_codelines = 0,0,0,0

codelines #=> 0
而当并行赋值中的右值数量小于左值数量时:

lines, codelines, total_lines, total_codelines = 0

codelines #=> nil
剩余值分配为
nil


因此,第二种类型的并行赋值实际上没有意义,除非您需要在特定范围内使用
nil
初始化变量;例如,迭代之外的计数器。

这两者之间的区别在于,第二个示例仅将
0
赋值给

lines, codelines, total_lines, total_codelines = 0,0,0,0

codelines #=> 0
而当并行赋值中的右值数量小于左值数量时:

lines, codelines, total_lines, total_codelines = 0

codelines #=> nil
剩余值分配为
nil

因此,第二种类型的并行赋值实际上没有意义,除非您需要在特定范围内使用
nil
初始化变量;例如,迭代之外的计数器。

存在差异

一,

右边的值和左边的变量一样多。每个值将分配给每个变量

二,

右侧的值不如左侧的变量多。缺少的值将被补充为
nil
<代码>行
将变为
0
,其余将变为
nil
。你没有理由这样使用作业

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

a, b, *c = some_array
在上述情况下,根据
某些数组的长度,
a
b
c
将分配不同的内容。

存在差异

一,

右边的值和左边的变量一样多。每个值将分配给每个变量

二,

右侧的值不如左侧的变量多。缺少的值将被补充为
nil
<代码>行
将变为
0
,其余将变为
nil
。你没有理由这样使用作业

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

a, b, *c = some_array

在上述情况下,根据
某些数组
a
b
的长度,
c
将分配不同的内容。

也有
line=codelines=total\u line=total\u codelines=0
但在这样做时,您需要小心共享引用问题。^^^共享引用问题?玩
a=b={};a[:a]=6
你会发现问题的。^^我试过了,但没发现有什么不同。更新后的结果:sw
b
a[:a]=6
之后是什么样子?也有
line=codelines=total\u line=total\u codelines=0
,但在这样做时,你需要小心共享引用问题。^^共享引用问题?玩
a=b={};a[:a]=6
你会发现问题的。^^我试过了,但没发现有什么不同。用结果更新帖子:sw
b
a[:a]=6
之后是什么样子?
a, b, *c = some_array