守卫是模式匹配的补充。借助它们可以进行更复杂的检查。它们可以用在部分、但并非全部可以使用模式匹配的场合,例如函数子句或 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