Elixir:IO.read从终端退出

时间:2019-11-02 06:09:04

标签: elixir

我正在尝试使用IO.read(:stdio,:all)逐行读取输入,并且能够在终端中输入,但在提供输入后无法退出。

defmodule SumOfTwo do
  def main() do
    IO.read(:stdio, :all)
    |> String.split()
    |> Enum.reduce(fn x, acc -> String.to_integer(acc) + String.to_integer(x) end)
    |> IO.puts()
  end
end

SumOfTwo.main()

1 个答案:

答案 0 :(得分:1)

:all赋予IO.read/2时,它将一直读取直到获得EOF(文件结尾)字符为止。如果通过管道输入到长生不老药脚本中,则包含一个:

$ echo "2 3 4" | elixir main.exs
9

您也可以从终端发送EOF字符。在Linux终端上,这通常是ctrl+d

$ elixir main.es
4
5
6
<ctrl+d here>15

不过,您将需要更改reduce函数,因为在整数上调用String.to_integer/1会引发错误。而我的示例将IO.read/2默认设置为:stdio

defmodule SumOfTwo do
  def main() do
    :all
    |> IO.read()
    |> String.split()
    |> Enum.reduce(fn x, acc -> acc + String.to_integer(x) end)
    |> IO.puts()
  end
end