ようへいの日々精進XP

よかろうもん

2018 年 03 月 05 日(月)

ジョギング

  • 休み
  • 筋肉ツウツウツウツウツウツウツウツウツウツウツウツウツウツウ

日課

  • お休み

とめ手羽

とある勉強会に参加した後で, とめ手羽で手羽をひたすら食べてきた.

美味しかった〜

今日のるびぃ ~ 配列を利用した多重代入 ~

引き続き, プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで の読書メモ.

まだピンと来ていない

まだピンと来ていないので, プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで の 4.2.2 と 4.7.5 から 4.7.6 とを改めて読んでみる.

配列を使った多重代入

右辺に配列を指定した場合, 多重代入することが出来る.

[1] pry(main)> a, b = [10, 20]
=> [10, 20]
[2] pry(main)> p a
10
=> 10
[3] pry(main)> p b
20
=> 20

右辺の数が少ない場合には, 残りの変数には nil が入る.

[4] pry(main)> a, b = [10]
=> [10]
[5] pry(main)> p a
10
=> 10
[6] pry(main)> p b
nil
=> nil

多重代入で残りの全要素を配列で受け取る

以下のように, 多重代入では左辺の変数よりも, 右辺の変数の数が多い場合には, 右辺の値は切り捨てられる.

[1] pry(main)> a, b = 10, 20, 30
=> [10, 20, 30]
[2] pry(main)> p a
10
=> 10
[3] pry(main)> p b
20
=> 20

左辺の変数に * (Splat Operator) を付けることで, 残りの全要素を配列として受けることが出来る.

[4] pry(main)> a, *b = 10, 20, 30
=> [10, 20, 30]
[5] pry(main)> p a
10
=> 10
[6] pry(main)> p b
[20, 30]
=> [20, 30]

1 つの配列を複数の引数に展開する

配列 a に複数の要素を追加する際, 要素が配列になっている場合に push すると, 以下のように意図しない結果となってしまう.

[7] pry(main)> a = []
=> []
[8] pry(main)> a.push(1)
=> [1]
[9] pry(main)> a.push([2, 3])
=> [1, [2, 3]]

このような場合には, 配列の前に * (Splat Operator) を付けることで, 複数の引数として展開することが出来る.

[10] pry(main)> a.push(*[2, 3])
=> [1, [2, 3], 2, 3]

ふむふむ.