突然ですが、変数「x」に1を、変数「y」に2を代入したい場合、あなたならどのようにして代入しますか?
普通に代入する場合は↓のように1つずつ代入していきます。
1 2 |
x = 1 y = 2 |
しかし、これでは少しめんどくさいので、複数の値を一気に代入したい場合には多重代入を行った方が楽です。例としては↓のような感じになります。
1 2 3 |
x, y = 1, 2 p x p y |
1 2
これで1行の式だけで複数の値を代入できるようになります。
右辺の要素数が多い場合は?
右辺の要素数が左辺よりも多い場合では余った「3」はスルーされ、代入は行われません。
1 2 3 |
x, y = 1, 2, 3 p x p y |
1 2
左辺の変数が多い場合は?
左辺の数が右辺よりも多い場合は、空の値という意味の「nil」が仮に代入されています。
1 2 3 4 |
x, y, z = 1, 2 p x p y p z |
1 2 nil
右辺のすべての要素を代入
右辺の要素が左辺より多くても余った値をまとめて代入することができます。
1 2 3 4 |
x, y, *z = 1, 2, 3, 4, 5 p x p y p z |
1 2 [3, 4, 5]
あまったデータの受け取りを行いたい変数の前に「*」を挿入します。するとその変数に配列でまとめてデータが代入されます。
これを応用すると、下記のように普通に配列を作れたりもします。
1 2 |
*a = 1, 2, 3, 4, 5 p a |
[1, 2, 3, 4, 5]
配列をそれぞれの変数に代入する
配列の要素を複数の変数に代入したいような場合にはかなり多重代入は使えます。↓のような配列があったとします。
1 |
num = [1, 2, 3] |
1 2 3 4 5 |
num = [1, 2, 3] x = num[0] y = num[1] z = num[2] p x, y, z |
1 2 3
上記のようにいちいち値を代入するのはめんどくさいので、多重代入を利用すると↓のように一気に代入を行うことができます。
1 2 3 |
num = [1, 2, 3] x, y, z = num p x, y, z |
1 2 3
ちなみに左辺や右辺が多い場合は先程と同じような代入のされ方になります。
1 2 3 4 5 6 7 8 9 10 |
num = [1, 2] x, y, z = num p x #=> 1 p y #=> 2 p z #=> nil ary = [4, 5, 6] a, b = ary p a #=> 4 p b #=> 5 |
コメントを残す