Эликсир: ввод-вывод из терминала - PullRequest
1 голос
/ 02 ноября 2019

Я пытаюсь читать входы, используя IO.read (: stdio,: all) построчно, и я могу вводить данные в терминале, но не могу выйти после ввода данных. * SumOfTwo.main ()

1 Ответ

1 голос
/ 02 ноября 2019

Когда вы задаете :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

Однако вы захотите изменить свою функцию сокращения, поскольку вызов String.to_integer/1 on для целого числа вызовет ошибку. И мой пример позволит 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
...