这是我要添加规范的代码。
@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
答案 0 :(得分:0)
您提供的代码可以完美地与函数配合使用(与宏相反)。即使Elixir测试套件的typespec也具有only functions tests with guards in specs。
我无法确定这是否尚未实施,或者是错误还是什么。我相信您最好直接在Elixir邮件列表和/或Elixir forum中提问。要么。也许值得提出问题。