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