守衛是模式比對的補充,可以用來做更複雜的檢查。在可以使用模式比對的某些(但並非全部)情況下也能使用守衛,例如函式子句或 case 子句。
def empty?(list) when is_list(list) and length(list) == 0 do
true
end
守衛以 when 關鍵字開頭,後面接著一個布林運算式。
守衛運算式是特殊的函式,它們:
true 或 false 值。常見的守衛清單記錄在 Elixir 文件 中,其中包括:
你可以用 defguard 定義自己的守衛。
依照 Elixir 的命名慣例,守衛的名稱應該以 is_ 開頭。
defmodule HTTP do
defguard is_success(code) when code >= 200 and code < 300
def handle_response(code) when is_success(code) do
:ok
end
end