我正在尝试请求一个数字列表(例如:“ 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一次运行此代码,使用每个函数的结果作为对下一个函数的输入,并在将它们全部放到一个文件中并运行它时实现了正确格式的列表,但它甚至不会编译...
任何帮助都会很棒。
问题是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允许(尽管不鼓励)函数调用而没有括号,并且pipe|>
优先于函数调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句