【问题标题】:How to convert list of strings to list of integers?如何将字符串列表转换为整数列表?
【发布时间】:2018-01-16 13:11:27
【问题描述】:

我正在尝试请求一个数字列表(例如:“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 一次运行此代码,使用每个函数的结果作为下一个函数的输入,并获得正确格式化的列表,但是当我将它们全部放在一个文件中并运行它时,它不会'甚至编译...

任何帮助都会很棒。

【问题讨论】:

    标签: elixir


    【解决方案1】:

    问题是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”,然后才是最先放置的inspect。这是因为 Elixir 允许(尽管不鼓励)不带括号的函数调用,并且管道 |> 优先于函数调用。

    【讨论】:

    • @Aetherus 这就是答案,不是吗?
    • @mudasobwa 非常感谢您的详细解释。我现在完全明白了。不过我还有一个问题。进入我的列表时,它现在输出一个空白列表“[]”......这很有趣,因为当我在 iex 中逐行执行时它仍然有效。有什么想法吗?
    • 我不知道你在说什么,我无法重现这种行为。如果仍有疑问,请发布另一个问题并详细说明问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2022-09-23
    • 2015-01-14
    • 2021-06-18
    • 1970-01-01
    • 2015-06-19
    相关资源
    最近更新 更多