这个 Elixir 表达式的正确语法是什么?
What is the correct syntax for this Elixir expression?
我得到了这个代码片段,作者还没有测试过,
|> (fn l ->[?[, Enum.map(l, &([inspect(limit: :infinity), ?\n])), ?]] end).()
作为流水线命令序列的一部分,使用 DataMorph 库将数据从 CSV 文件转换为 struct
,并将结果作为常规 Elixir 列表输出以输入到 Elixir 源- 即添加括号,并用逗号分隔列表的元素。
这就是序列的样子:
File.stream!('tmp.csv') \
|> DataMorph.structs_from_csv("open-register", :iso_country) \
|> (fn l ->[?[, Enum.map(l, &([inspect(limit: :infinity), ?\n])), ?]] end).()
|> (&File.write('output.txt',&1)).()
这是iex
中运行时的错误信息:
* (CompileError) iex:55: invalid args for &, expected an expression in the format of &Mod.fun/arity, &local/arity or a capture containing at least one argument as &1, got: [inspect(limit: :infinity), 10]
(elixir) expanding macro: Kernel.|>/2
iex:55: (file)
片段中的错误在哪里?
可以通过添加 &1
作为部分应用程序语法的第一个参数来修复语法错误:
|> (fn l ->[?[, Enum.map(l, &([inspect(&1, limit: :infinity), ?\n])), ?]] end).()
此代码不包含分隔逗号。为此,如果您想继续制作 iolist,我建议您使用 Enum.intersperse
:
iex(1)> [1, 2, [3], [4, 5]] |> (fn l ->[?[, Enum.map(l, &inspect(&1, limit: :infinity)) |> Enum.intersperse(",\n"), ?]] end).() |> IO.puts
[1,
2,
[3],
[4, 5]]
为了便于阅读,我还将其分成多行:
[1, 2, [3], [4, 5]]
|> (fn list ->
elements = Enum.map(list, &inspect(&1, limit: :infinity)) |> Enum.intersperse(",\n")
[?[, elements, ?]]
end).()
|> IO.puts
我得到了这个代码片段,作者还没有测试过,
|> (fn l ->[?[, Enum.map(l, &([inspect(limit: :infinity), ?\n])), ?]] end).()
作为流水线命令序列的一部分,使用 DataMorph 库将数据从 CSV 文件转换为 struct
,并将结果作为常规 Elixir 列表输出以输入到 Elixir 源- 即添加括号,并用逗号分隔列表的元素。
这就是序列的样子:
File.stream!('tmp.csv') \
|> DataMorph.structs_from_csv("open-register", :iso_country) \
|> (fn l ->[?[, Enum.map(l, &([inspect(limit: :infinity), ?\n])), ?]] end).()
|> (&File.write('output.txt',&1)).()
这是iex
中运行时的错误信息:
* (CompileError) iex:55: invalid args for &, expected an expression in the format of &Mod.fun/arity, &local/arity or a capture containing at least one argument as &1, got: [inspect(limit: :infinity), 10]
(elixir) expanding macro: Kernel.|>/2
iex:55: (file)
片段中的错误在哪里?
可以通过添加 &1
作为部分应用程序语法的第一个参数来修复语法错误:
|> (fn l ->[?[, Enum.map(l, &([inspect(&1, limit: :infinity), ?\n])), ?]] end).()
此代码不包含分隔逗号。为此,如果您想继续制作 iolist,我建议您使用 Enum.intersperse
:
iex(1)> [1, 2, [3], [4, 5]] |> (fn l ->[?[, Enum.map(l, &inspect(&1, limit: :infinity)) |> Enum.intersperse(",\n"), ?]] end).() |> IO.puts
[1,
2,
[3],
[4, 5]]
为了便于阅读,我还将其分成多行:
[1, 2, [3], [4, 5]]
|> (fn list ->
elements = Enum.map(list, &inspect(&1, limit: :infinity)) |> Enum.intersperse(",\n")
[?[, elements, ?]]
end).()
|> IO.puts