首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Elixir规范定义中使用guard子句时看到"spec has arity“

在Elixir规范定义中使用guard子句时看到"spec has arity“
EN

Stack Overflow用户
提问于 2018-08-22 15:55:27
回答 1查看 79关注 0票数 0

这是我试图添加一个规范的代码。

代码语言:javascript
复制
@spec failure(term) :: error(term)
@spec failure(reason) :: error(reason) when reason: term
defmacro failure(reason) do
  quote do
    {:error, unquote(reason)}
  end
end

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-08-22 16:52:17

您提供的代码可以完美地与函数一起工作(与宏相反)。即使是针对typespecs的Elixir测试套件也有only functions tests with guards in specs

我不知道这是不是还没有实现,或者它是一个bug还是什么。我相信你最好直接在Elixir maillist和/或Elixir forum上问这个问题。或。也许提交一个问题是值得的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51962215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档