Ruby变量赋值

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,bc应分配[1, 2, 3].任何的想法?

Ste*_*fan 5

有人可以解释为什么会发生这种情况

@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,, bc应该分配[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)


shi*_*vam 4

你很困惑

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)