elixir - 如果 params 不为零,则执行惯用的 Elixir ?

标签 elixir

如何在继续处理参数之前过滤掉无效参数,如 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/

相关文章:

python - 数据科学的 Elixir

testing - 如何为 ExUnit 实现 "assert_difference"

elixir - 是否可以在 elixir 中的流上运行 reduce?

date - 如何在 Elixir 中解析 DateTime?

mysql - 如何在 ecto(=> 0.11) 中调用 MySQL 存储过程?

Elixir - Phoenix :undefined function Hex. SCM.managers

error-handling - Elixir/Phoenix 处理 erlang 错误

erlang - 从 Elixir 调用 :binary. 匹配 Erlang 模块,但在选项方面遇到问题

elixir - 整数范围的大小写匹配

erlang - 如何在 Elixir 中表示大数