我正在尝试使用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()
答案 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