繁体   English   中英

如果params不是零,那么执行惯用药吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM