若想在同一個專案裡的不同 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
你最近買的那台遙控車,已經變成了一項全新的嗜好。你一直在籌辦遙控車比賽。
你快要寫完一個能執行比賽模擬的程式時,你的貓跳到鍵盤上,刪掉了幾行程式碼。現在你的程式已經無法編譯了……
Race.__struct__/0 is undefined
新增一個 alias,讓模組NeedForSpeed.Race可以用較短的名稱Race來引用。
Car.__struct__/0 is undefined
新增一個 alias,讓模組NeedForSpeed.RemoteControlCar可以用較短的名稱Car來引用。
undefined function puts/1
函式puts/1來自模組IO。將它 import 進來,就能直接使用,不需要再引用模組。
undefined function default_color/0
函式default_color/0、red/0、cyan/0、green/0全都來自模組IO.ANSI。你打算支援更多車色,所以想把整個模組 import 進來。可惜的是,模組IO.ANSI的函式color/1會和你其中一個本地函式衝突。把整個IO.ANSI模組 import 進來,唯獨排除那個函式。