如何在继续处理参数之前过滤掉无效参数,如 nil 或空列表?case
下面的使用似乎很常见,但代码并不清晰——我很确定有一种更简单、更惯用的方法来做到这一点。
def load(token) do
case token do
nil -> nil
[] -> nil
token -> process(token)
end
end
最佳答案
如果一个函数有多个子句,Elixir 将尝试每个子句,直到找到一个匹配的子句。这允许您根据提供的参数“过滤” - 如果函数不共享公共(public)逻辑,则特别有用。
def load([]), do: IO.puts("empty")
def load(token) when token == nil, do: IO.puts("nil") # Matching `nil' is OK too.
def load(token), do: process(token)
第二个子句说明了允许更一般匹配的守卫的使用,有 a number of predicates that are valid as guards所有这些都可以附加到(几乎)任何用于以递归或其他方式切换函数参数的表达式。
这个约定适用于所有现有的 BEAM 语言,在阅读 OTP 文档时要牢记在心。
关于elixir - 如果 params 不为零,则执行惯用的 Elixir ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37781229/