并行赋值

我前面提到过,一个方法可以返回多个值,用逗号分隔。 通常,你需要将这些返回值分配给一组匹配变量。

在 Ruby 中,这可以通过并行赋值在单个操作中完成。这意味着你可以在赋值运算符的左侧使用多个变量,在右侧使用多个值。右侧的值将按顺序分配给左侧的变量,如下所示:

parallel_assign.rb
  1. s1, s2, s3 = "Hickory", "Dickory", "Dock"

这种能力不仅为你提供了进行多次赋值的快捷方式;它还允许你交换变量的值(你只需在赋值运算符的任一侧更改它们的顺序):

  1. i1 = 1
  2. i2 = 2
  3. i1, i2 = i2, i1 #=> i1 is now 2, i2 is 1

并且你可以根据方法返回值进行多次赋值:

  1. def returnArray( a, b, c )
  2. a = "Hello, " + a
  3. b = "Hi, " + b
  4. c = "Good day, " + c
  5. return a, b, c
  6. end
  7. x, y, z = returnArray( "Fred", "Bert", "Mary" )

如果在左侧指定的变量多于赋值运算符右侧的值,则任何“尾随”变量都将分配为 nil

  1. x, y, z, extravar = returnArray( "Fred", "Bert", "Mary" ) # extravar = nil

方法返回的多个值将放入数组中。当你将数组放在多变量赋值的右侧时,它的各个元素将分配给每个变量,如果提供的变量太多,则额外的将被分配为 nil

  1. s1, s2, s3 = ["Ding", "Dong", "Bell"]