0

我正在使用 Elixir,但出现 Dialyzer (via 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。

4

1 回答 1

0

我认为这是因为您使用from_seconds/1特定值 0 进行调用,因此返回不是可变的。我的猜测是在几秒钟内运行它,因为传入的变量可能会起作用:

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

  date ->
    {:ok, date}
end
于 2020-05-13T19:18:44.250 回答