動かざることバグの如し

近づきたいよ 君の理想に

Rubyたんの多重代入について

気になったのでメモ

hoge, piyo, fuga = 1, 2, 3
hoge ,piyo = [1,2]

実用的に考えるとid, domain, = 'foo@bar.com'.split('@')とか

そもそもどういう何ぞい

  • 多重代入とは複数の式または配列から同時に代入を行えるスグレモノ
  • 右辺の要素が余ったら無視される
  • 逆に右辺の要素が足りなければnilが代入される

どれどれ

hoge, piyo, fuga = 1, 2
=>hoge = 1
=>piyo = 2
=>fuga = nil
hoge, piyo = 1, 2, 3
=>hoge = 1
=>piyo = 2

確かに不足した場合はnilが入るし過剰分は無視されている

興味深いのはここから

  • 左辺の最後の式の直前に*がついていると余った要素は配列として格納される

なるほどね

hoge, *piyo = 1, 2, 3
=>hoge = 1
=>piyo = [2, 3]
*hoge, piyo = 1, 2, 3
=>hoge = [1, 2]
=>piyo = 3

ちなみにこの*をsplat演算子と呼ぶサイトもあるけど正確には演算子でも何でもない