我无法将列表写入elixir中的文件。如果我尝试编写整个列表,我会收到错误,如果我尝试枚举列表,我会收到错误。这是一个整数列表。
{:ok, file} = File.open "loop_issues.csv", [:write]
for item <- find_common_items(list_one, list_two) do
IO.write(file, item <> ",")
end
File.close file
以下是该模块的IEX读数示例,以及我使用它。
commons
[6579, 9397]
** (ArgumentError) argument error
(autoupgrader_phx) lib/modules/tree_validator.ex:30: anonymous fn/3 in TreeV
alidator.check_all_users/0
(elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
(autoupgrader_phx) lib/modules/tree_validator.ex:29: anonymous fn/3 in TreeV
alidator.check_all_users/0
(elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
(autoupgrader_phx) lib/modules/tree_validator.ex:14:
这是我在用它来测试它的地方:
iex(2)> {:ok, file} = File.open "test_file.txt", [:write]
{:ok, #PID<0.469.0>}
iex(3)> whatever = [123, 234, 6324]
[123, 234, 6324]
iex(4)> IO.write(file, whatever)
** (ErlangError) erlang error: :no_translation
(stdlib) :io.put_chars(#PID<0.469.0>, :unicode, [123, 234, 6324])
而在循环中,我也尝试了Enum.reduce:
iex(4)> for thing <- whatever, do: IO.write(file, thing)
** (ErlangError) erlang error: :terminated
(stdlib) :io.put_chars(#PID<0.469.0>, :unicode, "123")
我做错了什么。我也尝试过binwrite,但也出现了同样的错误。
答案 0 :(得分:4)
IO.write/2
期望参数为chardata | String.Chars.t
。在内部,它调用Erlang的:io.put_chars/2
。
列表[1]
没有魔术转换为chardata "[1]"
,列表被视为字符列表,[123, 234]
是无效的unicode序列。看:
iex> IO.write(file, [65, 66, 67])
:ok
你在文件中得到的是ABC
,因为65
是A
的unicode / ascii值。
回到如何吐出整数列表:你应该将输入转换为实现String.Chars
协议的东西:
iex> IO.write(file, inspect(whatever))
:ok
在文件中你会得到:
[123, 234, 6324]