如何正确调用 Enum.map 中的函数?

How can I properly call functions within Enum.map?

我正在尝试将字符串时间戳转换为 unix 时间,但是,我 运行 出现以下错误:

(CompileError) nested captures via & are not allowed: &(NativeDateTime.diff(&1, ~N[1970-01-01 00:00:00]))

我不熟悉 & 在 Elixir 中的功能。我要修复的代码片段是:

|> Enum.map(fn 
  [user_id, state, timestamp] -> 
    unix = &NativeDateTime.from_iso8601(&1, timestamp) 
    |> &NativeDateTime.diff(&1,~N[1970-01-01 00:00:00])

无需尝试在 fn end 块内定义额外的匿名函数 - 您只需将参数用于常规函数调用即可。

这对我有用:

[[nil, nil, "2022-05-24T19:00:30.510232Z"]]
|> Enum.map(fn [_user_id, _state, timestamp] ->
  {:ok, datetime, 0} = DateTime.from_iso8601(timestamp)
  DateTime.to_unix(datetime)
end)

输出:

[1653418830]