在 NaiveDateTime 上尝试 .add/3 时出错
Error when attempting .add/3 on NaiveDateTime
我正在学习 Elixir 并且遇到一个简单(我认为)操作的错误:
d = NaiveDateTime.from_erl({{year, month, day}, {hours, minutes, seconds}}, {0, 0}, Calendar.ISO)
NaiveDateTime.add(d, 20, :second)
结果如下:
Attempted function clauses (showing 1 out of 1):
def add(%{microsecond: {_, precision}, calendar: calendar} = naive_datetime, amount_to_add, unit) when is_integer(amount_to_add)
我的代码与我在其他地方看到的示例相匹配。我不太明白错误语法。我的理解是 %{microsecond..
是一张地图。为什么会出错?
您几乎做到了:注意您的 return 值!
NaiveDateTime.from_erl/3 return 是一个 元组 ,而不仅仅是一个 NaiveDateTime
结构,所以这就是 NaiveDateTime.add/3
引发 FunctionClauseError
.
比较以下 2 个输出:
iex> d = NaiveDateTime.from_erl({{2021, 3, 30}, {10, 17, 0}}, {0, 0}, Calendar.ISO)
{:ok, ~N[2021-03-30 10:17:00]}
iex> d = NaiveDateTime.from_erl!({{2021, 3, 30}, {10, 17, 0}}, {0, 0}, Calendar.ISO)
~N[2021-03-30 10:17:00]
第一个 return 是一个包含 NaiveDateTime
的元组,而第二个 return 仅包含 NaiveDateTime
.
简而言之,您可以使用 !
变体 NaiveDateTime.from_erl!/3
,其中 return 是 NaiveDateTime
或在错误时引发,或者您可以匹配值 return 像这样从 NaiveDateTime.from_erl/3
编辑:
iex> {:ok, d} = NaiveDateTime.from_erl({{2021, 3, 30}, {10, 17, 0}}, {0, 0}, Calendar.ISO)
# OR
iex> d = NaiveDateTime.from_erl!({{2021, 3, 30}, {10, 17, 0}}, {0, 0}, Calendar.ISO)
# then you may add:
iex> NaiveDateTime.add(d, 20, :second)
~N[2021-03-30 10:17:20]
函数的“常规”和 !
变体在 Elixir 中很常见,并且当您只想要值时意外地以元组结尾是很常见的。
我正在学习 Elixir 并且遇到一个简单(我认为)操作的错误:
d = NaiveDateTime.from_erl({{year, month, day}, {hours, minutes, seconds}}, {0, 0}, Calendar.ISO)
NaiveDateTime.add(d, 20, :second)
结果如下:
Attempted function clauses (showing 1 out of 1):
def add(%{microsecond: {_, precision}, calendar: calendar} = naive_datetime, amount_to_add, unit) when is_integer(amount_to_add)
我的代码与我在其他地方看到的示例相匹配。我不太明白错误语法。我的理解是 %{microsecond..
是一张地图。为什么会出错?
您几乎做到了:注意您的 return 值!
NaiveDateTime.from_erl/3 return 是一个 元组 ,而不仅仅是一个 NaiveDateTime
结构,所以这就是 NaiveDateTime.add/3
引发 FunctionClauseError
.
比较以下 2 个输出:
iex> d = NaiveDateTime.from_erl({{2021, 3, 30}, {10, 17, 0}}, {0, 0}, Calendar.ISO)
{:ok, ~N[2021-03-30 10:17:00]}
iex> d = NaiveDateTime.from_erl!({{2021, 3, 30}, {10, 17, 0}}, {0, 0}, Calendar.ISO)
~N[2021-03-30 10:17:00]
第一个 return 是一个包含 NaiveDateTime
的元组,而第二个 return 仅包含 NaiveDateTime
.
简而言之,您可以使用 !
变体 NaiveDateTime.from_erl!/3
,其中 return 是 NaiveDateTime
或在错误时引发,或者您可以匹配值 return 像这样从 NaiveDateTime.from_erl/3
编辑:
iex> {:ok, d} = NaiveDateTime.from_erl({{2021, 3, 30}, {10, 17, 0}}, {0, 0}, Calendar.ISO)
# OR
iex> d = NaiveDateTime.from_erl!({{2021, 3, 30}, {10, 17, 0}}, {0, 0}, Calendar.ISO)
# then you may add:
iex> NaiveDateTime.add(d, 20, :second)
~N[2021-03-30 10:17:20]
函数的“常规”和 !
变体在 Elixir 中很常见,并且当您只想要值时意外地以元组结尾是很常见的。