这是我试图添加一个规范的代码。
@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发布于 2018-08-22 16:52:17
您提供的代码可以完美地与函数一起工作(与宏相反)。即使是针对typespecs的Elixir测试套件也有only functions tests with guards in specs。
我不知道这是不是还没有实现,或者它是一个bug还是什么。我相信你最好直接在Elixir maillist和/或Elixir forum上问这个问题。或。也许提交一个问题是值得的。
https://stackoverflow.com/questions/51962215
复制相似问题