如何声明多个变量

时间:2015-01-25 07:17:30

标签: ruby

  1. 我想知道如何声明多个变量。我输入a,b=1期望获得a=1,b=1,但我得到了:

    a,b=1
    a #=> 1
    b #=> nil
    

    我怎么能这样做?

  2. 在这段代码之后,我做了:

    a="Hello "
    b=a
    c="World~"
    b << c
    b #=> "Hello World"
    

    为什么ba的值相同?

3 个答案:

答案 0 :(得分:3)

要在同一行声明多个变量,您可以这样做:

a = b = "foo"
puts a # return "foo"
puts b # return "foo" too

关于您的第二个问题,在执行b << c时,您要将c的值分配给b。然后,您将覆盖存储在b中的先前值。同时,a保持相同的值,因为Ruby不是用户指针。

答案 1 :(得分:2)

您正在做的事情称为解构分配。基本上,你取出等号右边的东西,然后对其进行解构,或将它拆开,然后将每个部分分配给左边的每个相应变量。

Ruby非常友好,并提供一些可能令人困惑的语法糖。

键入时:

a, b = 1

你真的在说更接近这个:

[a, b] = [1, nil]

可以找到解构分配的一个很好的例子here。它适用于JavaScript,但我喜欢它,因为语法非常明确,当你做这样的分配时会发生什么。

答案 2 :(得分:0)

我想,在

的情况下
a, b, c = 1, 2

运行时系统的工作方式如下:

a, b, c = [1, 2]

_result = ( a, b, c = (_values = [1, 2]) )

a = _values[0] # => 1

b = _values[1] # => 2

c = _values[2] # => nil

_result = _values # => [1, 2]

但是,如果右侧是单个值:a, b = 1,则计算过程看起来有点不同:

_result = ( a, b = ( _value = (_values = [1]).first ) )

a = _values[0] # => 1

b = _values[1] # => nil

_result = _value # => 1

有人可以批准或反驳我的假设吗?