0

这是我尝试添加规范的代码。

@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
4

1 回答 1

0

您提供的代码可以完美地与函数配合使用(与宏相反)。即使是用于 typespecs 的 Elixir 测试套件也只有带有保护的函数测试 specs

我无法判断这是否尚未实现,或者它是一个错误或什么。我相信您最好直接在 Elixir 邮件列表和/或Elixir 论坛上提问。或者。也许提出问题是值得的。

于 2018-08-22T08:52:17.007 回答