如何在Elixir和Dialyzer中覆盖一个函数或变量类型?

问题描述 投票:0回答:1

我正在使用Elixir,但我收到一个Dialyzer(通过Dialyxir)的错误信息,该信息显示

The pattern
variableVdate

can never match, because previous clauses completely cover the type
{:error, :badarg}.

以下是代码

date = Timex.DateTime.from_seconds(0)

case date do
  {:error, :badarg} ->
    {:error, "Bad Date"}

  date ->
    {:ok, date}
end

我相信这是因为 Timex.DateTime.from_seconds 拥有 错别字.

他们将其定义为:

@spec from_seconds(non_neg_integer) :: DateTime.t :: {:error, atom}

但我... 认为 应该是

@spec from_seconds(non_neg_integer) :: DateTime.t | {:error, atom}

有没有什么方法可以解决这个问题,也许可以通过覆盖类型规范或 date 类型的某种方式?

由于其他原因,我无法将Timex升级到3版本。

elixir dialyzer timex
1个回答
0
投票

我想这是因为你在调用 from_seconds/1 用一个特定的值,0,所以返回值不是变量。我的猜测是,将秒作为一个传递的变量来运行这个程序可能会成功。

case Timex.DateTime.from_seconds(seconds) do
  {:error, :badarg} ->
    {:error, "Bad Date"}

  date ->
    {:ok, date}
end
© www.soinside.com 2019 - 2024. All rights reserved.