[英]Idiomatic elixir to execute if params is not nil?
在继续处理参数之前,如何过滤掉无效参数如nil或空列表?
下面的case
使用似乎很常见,但代码并不清楚 - 我很确定有一种更简单和惯用的方法可以做到这一点。
def load(token) do
case token do
nil -> nil
[] -> nil
token -> process(token)
end
end
如果函数有多个子句,Elixir将尝试每个子句,直到找到匹配的子句。 这允许您根据提供的参数“过滤” - 如果函数不共享通用逻辑,则特别有用。
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)
第二个子句说明了使用允许更一般匹配的保护,有许多谓词有效作为保护,所有这些谓词都可以附加到(几乎)任何用于切换函数参数的表达式,递归或其他。
此约定适用于所有现有的BEAM语言,在阅读OTP文档时请记住这一点。
我更喜欢
def load(nil), do: nil
def load([]), do: nil
def load(token), do: process(token)
你也可以这样做:
def load([]), do: nil
def load(token) when not is_nil(token), do: process(token)
def load(_), do: nil
但我不会比较token == nil
因为你会收到编译器的警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.