在Elixir规范定义中使用guard子句时,看到“ spec has a arity错误”

时间:2018-08-22 07:55:27

标签: elixir dialyzer typespec

这是我要添加规范的代码。

@spec failure(term) :: error(term)
@spec failure(reason) :: error(reason) when reason: term
defmacro failure(reason) do
  quote do
    {:error, unquote(reason)}
  end
end

第一个规范定义可以正常工作。 但是,我想更清楚一点,如果原因是整数,那么返回的错误也将包含一个整数。 第二个规范不起作用。错误是

Compiling 1 file (.ex)

== Compilation error in file lib/ok.ex ==
** (CompileError) lib/ok.ex:71: spec has wrong arity
    (stdlib) lists.erl:1338: :lists.foreach/2
    (stdlib) erl_eval.erl:677: :erl_eval.do_apply/6

1 个答案:

答案 0 :(得分:0)

您提供的代码可以完美地与函数配合使用(与宏相反)。即使Elixir测试套件的typespec也具有only functions tests with guards in specs

我无法确定这是否尚未实施,或者是错误还是什么。我相信您最好直接在Elixir邮件列表和/或Elixir forum中提问。要么。也许值得提出问题。