我正在尝试请求一个数字列表(例如:“1 2 3 4 5 6”)并输出一个整数列表(例如:“[1,2,3,4,5,7]”)。我想出了以下代码:
IO.gets ("Enter a list: ")
|> String.trim
|> String.split
|> Enum.map(&String.to_integer/1)
这不会编译并给我以下错误:
== Compilation error in file test.ex ==
** (ArgumentError) argument error
:erlang.binary_to_integer("Enter")
(elixir) lib/enum.ex:1270: Enum."-map/2-lists^map/1-0-"/2
test.ex:4: (file)
(elixir) lib/kernel/parallel_compiler.ex:121: anonymous fn/4 in
Kernel.ParallelCompiler.spawn_compilers/1
我已经通过iex一次一行地运行这个代码,使用每个函数的结果作为下一个的输入并实现正确格式化的列表但是当我把它们放在一个文件中并运行它时,它赢了甚至编译...
任何帮助都会很棒。
答案 0 :(得分:11)
问题是IO.gets
和左括号之间的空格。这可行:
IO.gets("Enter a list: ")
|> String.trim
|> String.split
|> Enum.map(&String.to_integer/1)
运营商优先事项:
# 3 1
IO.inspect (IO.inspect(42, label: "foo"))
# 2
|> IO.inspect(label: "bar")
foo: 42
bar: 42
42
让我们看看这里发生了什么:我放置了表示执行顺序的数字。第一个执行的是“foo”,然后是“bar”,然后才进行首次检查。这是因为Elixir允许(尽管不鼓励)没有括号的函数调用,而管道|>
优先于函数调用。