學習軌道
/
Elixir
Elixir
/
練習
/
極速快感
極速快感

極速快感

學習練習

簡介

別名

若想在同一個專案裡的不同 Elixir 模組之間共用程式碼,你需要用完整名稱來參照外部的模組。但如果這個名稱太長或讓人搞不清楚呢?

特殊形式alias可以讓你縮短或改變參照外部模組時所用的名稱。不加任何引數時,它會把模組名稱縮減到最後一段,例如MyApp.Logger.Settings會變成Settings。自訂名稱則可以用:as選項指定。

別名通常會加在模組定義的開頭。

defmodule Square do
  alias Integer, as: I

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

匯入

特殊形式import可以讓你使用外部模組的函式,而不必寫出模組名稱。

匯入整個外部模組時,可能會與模組內既有的函式產生衝突。為了避免這種情況,有兩個選項可用::except和:only。兩者都接受關鍵字列表,其中鍵是函式名稱,值則是函式的引數個數。

匯入通常會加在模組定義的開頭。

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

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

說明

你最近買的那台遙控車,已經變成了一項全新的嗜好。你一直在籌辦遙控車比賽。

你快要寫完一個能執行比賽模擬的程式時,你的貓跳到鍵盤上,刪掉了幾行程式碼。現在你的程式已經無法編譯了……

1. 修正編譯錯誤 Race.__struct__/0 is undefined

新增一個 alias,讓模組NeedForSpeed.Race可以用較短的名稱Race來引用。

2. 修正編譯錯誤 Car.__struct__/0 is undefined

新增一個 alias,讓模組NeedForSpeed.RemoteControlCar可以用較短的名稱Car來引用。

3. 修正編譯錯誤 undefined function puts/1

函式puts/1來自模組IO。將它 import 進來,就能直接使用,不需要再引用模組。

4. 修正編譯錯誤 undefined function default_color/0

函式default_color/0、red/0、cyan/0、green/0全都來自模組IO.ANSI。你打算支援更多車色,所以想把整個模組 import 進來。可惜的是,模組IO.ANSI的函式color/1會和你其中一個本地函式衝突。把整個IO.ANSI模組 import 進來,唯獨排除那個函式。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Elixir Exercism

準備好開始 極速快感 了嗎?

註冊 Exercism,透過 58 個概念168 個練習 和真人引導來學習並精通 Elixir,全部免費。