変数に*を付けて関数の返り値をうけとる

返り値がArrayだったらそのままArrayになって、そうでないものはArrayにつっこんでArrayになる。はぁ?わかりづらい説明だ。

def func
  return "oi"
end
a = func # =>  "oi"
*a = func # =>  ["oi"]

配列が返ってきても二重になったりしない。

def func2
  return ["oi"]
end
a = func2 # => ["oi"]
*a = func2 # =>  ["oi"]

このあたりで
多重代入
ようするに、*つきでうけとれば、いつでも配列になっていると期待していいということなんだとおもう。
この変数をreturnさせるときに、きにせず*つけて展開させられる。上の例でfuncの返り値を*なしで受け取った場合、*つけてreturnするとStringにto_aがなくなってるのでおこられてしまう。(というのがちょっとまえにoptparse.rbに起きた変更のいきさつ。素人解釈。)