【发布时间】:2017-04-23 22:57:37
【问题描述】:
这个代码sn-p给我了,作者没有测试过,
|> (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)
sn-p的故障在哪里?
【问题讨论】:
-
这行得通吗?
|> (fn l ->[?[, Enum.map(l, &([inspect(&1, limit: :infinity), ?\n])), ?]] end).() -
@Dogbert 它编译正确并添加了左括号和右括号,但不包括分隔逗号。这是棘手的部分,因为必须进行测试以确保它不是附加之前的最后一项。
-
没有代码可以用逗号分隔项目。
|> (fn l ->[?[, Enum.map(l, &([inspect(&1, limit: :infinity), ?\n])) |> Enum.intersperse(?,), ?]] end).()怎么样?你能发布数据和预期的输出吗? -
您的建议部分有效,但逗号被附加到后续条目中,而不是被附加并导致语法错误。即
,%StructType.TplParams{xxx,而不是将逗号附加到上一行,下一行从%StructType.TplParams{xxx开始。 pastebin.com/DCrpNDUh 我认为正确的方法是在inspect公式中使用,,然后在intersperse函数中使用\n。我会试试看。 -
我已经发布了一个答案,其中穿插了
",\n"。我想这就是你想要的。