可变交换?

时间:2014-01-30 06:30:55

标签: ruby

@current_engine, engine_was = engine.to_sym, @current_engine

我怎么能解释这个表达式或建议我在哪里可以找到这种表达式的定义,最初我认为有交换值

2 个答案:

答案 0 :(得分:1)

这就是所谓的“并行分配”(现在你可以谷歌了)。它或多或少等同于:

_a = engine.to_sym
_b = @current_engine
@current_engine = _a
engine_was = _b

首先,评估右侧的值,然后分配它们。这就是为什么你也可以使用这个技巧交换价值:

x, y = y, x

y被赋予x的值时,它将使用旧值,该值保存在此表达式的开头。

答案 1 :(得分:1)

您可以将其扩展为三个步骤:

  1. 从以下位置创建数组:

    a = engine.to_sym, @current_engine
    # => [ 1, 0 ]
    
  2. 将数组分配到表达式的左侧。

  3. 将数组扩展为指定的变量:

    @current_engine = a[ 0 ]
    engine_was = a[ 1 ]