同じ値が複数回登場する場合に、「アンカー(&)」と「エイリアス(*)」を使います。アンカーは変数のようなもので、値に名前を付けます。値に変更があっても、アンカー部分の値を変更するだけで良くなるので便利です。なお、この記事はドットインストールというプログラミング学習サービスの内容を参考にしています。
作成するファイル
- parse.rb
- data.yml:データファイル
ファイルをそれぞれ以下のように作成します。
# parse.rb require 'yaml' emails = YAML.load_file('data.yml') p emails
# data.yml - tanaka - tanaka - sato - sato - sato - sato - sato
以下のコマンドで出力を確認します。
ruby parse.rb ["tanaka", "tanaka", "sato", "sato", "sato", "sato", "sato"]
アンカーとエイリアス
データファイルをアンカーとエイリアスを使った記法に書き換えます。エイリアスとは、別名のことです。
- &:アンカー
- *:エイリアス
- &leader tanaka # アンカー - *leader # エイリアス - &staff sato - *staff - *staff - *staff - *staff
以下のコマンドで出力を確認します。
ruby parse.rb ["tanaka", "tanaka", "sato", "sato", "sato", "sato", "sato"]
友人関係を管理したい場合を考える
例えば、以下のようなデータがあったとします。
- name: hoge score: 80 - name: fuga score: 90 - name: hatena score: 100
ここに友人関係を追加すると以下のようになります。
- &hoge name: hoge score: 80 - &fuga name: fuga score: 90 friends: - *hoge - name: hatena score: 100 friends: - *hoge - *fuga
ruby parse.rb [{"name"=>"hoge", "score"=>80}, {"name"=>"fuga", "score"=>90, "friends"=>[{"name"=>"hoge", "score"=>80}]}, {"name"=>"hatena", "score"=>100, "friends"=>[{"name"=>"hoge", "score"=>80}, {"name"=>"fuga", "score"=>90, "friends"=>[{"name"=>"hoge", "score"=>80}]}]}]
まとめ
アンカーとエイリアスを使うと値が変更しやすくなりました。また、複雑なデータを簡潔に記述できることが分かりました。