Sac*_*sad 8 ruby variable-assignment
有人可以解释这种行为:
a = b = c = 1, 2, 3
a # => [1, 2, 3]
b # => 1
c # => 1
Run Code Online (Sandbox Code Playgroud)
在分配a = b = c = 1, 2, 3中,变量a,b和c应分配[1, 2, 3].任何的想法?
有人可以解释为什么会发生这种情况
@shivam 已经回答了这个问题,但添加一些括号可能会更清楚地澄清问题.
a = b = c = 1, 2, 3
Run Code Online (Sandbox Code Playgroud)
被解释为:
a = [(b = (c = 1)), 2, 3]
Run Code Online (Sandbox Code Playgroud)
表达式按以下顺序计算:
c = 1
b = ( )
a = [( ), 2, 3]
Run Code Online (Sandbox Code Playgroud)
变量
a,,b和c应该分配[1, 2, 3]
要获得预期的结果,您可以写:
a = b = c = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
这被解释为:
a = (b = (c = [1, 2, 3]))
Run Code Online (Sandbox Code Playgroud)
并按此顺序评估:
c = [1, 2, 3]
b = ( )
a = ( )
Run Code Online (Sandbox Code Playgroud)
你很困惑
a=b=c=1,2,3
Run Code Online (Sandbox Code Playgroud)
实际上是:
a = (b = c = 1), 2, 3
Run Code Online (Sandbox Code Playgroud)
那留下
c = 1 # => 1
b = c # => 1
a = 1,2,3 # => [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)