トラック
/
Elixir
Elixir
/
演習
/
Need For Speed
Need For Speed

Need For Speed

学習演習

はじめに

alias

同じプロジェクト内の異なるElixirモジュール間でコードを共有するには、外部のモジュールをそのフルネームで参照する必要があります。でも、その名前が長すぎたり紛らわしかったりしたらどうでしょう?

特殊形式のaliasを使うと、外部モジュールを参照するときの名前を短くしたり変更したりできます。引数なしで使うと、モジュール名は最後の部分だけに切り詰められます。たとえば、MyApp.Logger.SettingsはSettingsになります。:asオプションを使えば、独自の名前を指定できます。

通常、エイリアスはモジュール定義の先頭に追加します。

defmodule Square do
  alias Integer, as: I

  def area(a), do: I.pow(a, 2)
end

import

特殊形式のimportを使うと、外部モジュールの名前を使わずに、そのモジュールの関数を利用できます。

外部モジュール全体をインポートすると、既存のローカル関数と衝突する可能性があります。これを避けるには、:exceptと:onlyの2つのオプションがあります。どちらもキーワードリストを想定しており、キーは関数名、値はその関数のアリティです。

通常、インポートはモジュール定義の先頭に追加します。

defmodule Square do
  import Integer, only: [pow: 2]

  def area(a), do: pow(a, 2)
end

説明

最近買ったあのラジコンカーが、すっかり新しい趣味になりましたね。ラジコンカーのレースを開催しています。

レースのシミュレーションを実行できるプログラムを、もう少しで書き終えるところでした。ところが、猫がキーボードに飛びついて、コードを数行消してしまいました。そのせいで、プログラムがコンパイルできなくなってしまいました…

1. コンパイルエラーRace.__struct__/0 is undefinedを修正する

モジュールNeedForSpeed.Raceを、より短い名前Raceで参照できるように、エイリアスを追加してください。

2. コンパイルエラーCar.__struct__/0 is undefinedを修正する

モジュールNeedForSpeed.RemoteControlCarを、より短い名前Carで参照できるように、エイリアスを追加してください。

3. コンパイルエラーundefined function puts/1を修正する

関数puts/1は、モジュールIOで定義されています。モジュールを参照せずに使えるように、インポートしてください。

4. コンパイルエラーundefined function default_color/0を修正する

関数default_color/0・red/0・cyan/0・green/0は、いずれもモジュールIO.ANSIで定義されています。ほかの車の色にも対応させたいと考えているので、モジュール全体をインポートしたいところです。残念ながら、モジュールIO.ANSIの関数color/1は、ローカルで定義した関数の1つと衝突します。その1つの関数を除いて、IO.ANSIモジュール全体をインポートしてください。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Elixir Exercism

Need For Speedを始める準備はできましたか?

Exercismに登録すれば、58個のコンセプト168個の演習、そして本物の人間によるメンタリングとともに、Elixirを学んでマスターできます。すべて無料です。