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 忽略生成代码的透析器警告_Elixir_Dialyzer - Fatal编程技术网

Elixir 忽略生成代码的透析器警告

Elixir 忽略生成代码的透析器警告,elixir,dialyzer,Elixir,Dialyzer,我正在努力使我的库()能够很好地与透析器配合使用,以处理结果元组 目前,若给出不正确的数据输入,代码会引发一个很好的错误。然而,透析器指出,这种情况是从来没有必要的。我仍然想保留这个错误案例。向图书馆的新用户解释这个错误很有帮助,但我想让透析器忽略它 quote location: :keep do case unquote(right) do {:ok, unquote(left)} -> unquote(expand_bindings(rest, yield_b

我正在努力使我的库()能够很好地与透析器配合使用,以处理结果元组

目前,若给出不正确的数据输入,代码会引发一个很好的错误。然而,透析器指出,这种情况是从来没有必要的。我仍然想保留这个错误案例。向图书馆的新用户解释这个错误很有帮助,但我想让透析器忽略它

quote location: :keep do
  case unquote(right) do
    {:ok, unquote(left)} ->
      unquote(expand_bindings(rest, yield_block, exception_clauses))

    {:error, reason} ->
      {:error, reason}

      case reason do
        unquote(exception_clauses)
      end

      # This block will never be called, as far as dialyzer is concerned
      # However I want to keep it for the cases when diayzer is not being used in the project
      return ->
        raise %OK.BindError{
          return: return,
          lhs: unquote(Macro.to_string(left)),
          rhs: unquote(Macro.to_string(right))
        }
  end
end

可以在这里看到源代码

传递
生成:true
报价

quote location: :keep, generated: true do

这告诉编译器和透析器不要对该代码发出警告。

向库的新用户解释错误非常有帮助——这就是注释/@doc的作用。为了文档的目的,在代码中保留一个不可访问的子句是没有意义的。那么…那是什么样的内心陈述?这是伪代码吗?如果你违反了规范,代码是可以访问的。但经验表明,许多长生不老药开发者将以不符合规范的方式使用它。如果不运行透析器,我的错误将是他们看到的第一件事,关于你的评论,“如果你违反了规范,代码是可以访问的”,用透析器来验证你的直觉可能是值得的——没有规范。我该如何使这一点仅适用于最后一个案例条款我能想到的最好方法是分别引用
return->…
子句和
generated:true
并将其赋给一个变量,然后像对待
例外条款那样将其插入主引号中。