Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如果params不是nil,则执行惯用的长生不老药?_Elixir - Fatal编程技术网

Elixir 如果params不是nil,则执行惯用的长生不老药?

Elixir 如果params不是nil,则执行惯用的长生不老药?,elixir,Elixir,在继续处理参数之前,如何过滤掉无效的参数,如nil或空列表 下面的案例似乎很常见,但它不是清晰的代码——我非常确定有一种更简单、惯用的方法来实现这一点 def load(token) do case token do nil -> nil [] -> nil token -> process(token) end end 如果函数有多个子句,Elixir将尝试每个子句,直到找到一个匹配的子句。这允许您根据提供的参数进行“筛选”

在继续处理参数之前,如何过滤掉无效的参数,如nil或空列表

下面的
案例
似乎很常见,但它不是清晰的代码——我非常确定有一种更简单、惯用的方法来实现这一点

 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
,因为编译器会给你一个警告。

好吧,这也很好,
def load(nil),do:IO.puts(“nil”)
谢谢。我想你会得到一个警告,与nil比较是不安全的。我认为您需要使用
is\u nil()