IO

IO у Elixir

1 вправа

Про концепцію IO

Функції для роботи з введенням і виведенням надає модуль IO.

  • IO.puts/2 записує рядок тексту (англ. string) у стандартне виведення, а потім додає символ нового рядка. Повертає :ok.
  • IO.write/2 записує рядок тексту у стандартне виведення, не додаючи символу нового рядка. Повертає :ok.
  • IO.gets/2 читає рядок зі стандартного введення.
  • IO.inspect/2 записує будь-що у стандартне виведення та приймає корисні опції, як-от :label. Повертає значення, яке їй передали, без змін. Стане в пригоді для налагодження.

Протокол String.Chars

Якщо ми спробуємо передати в IO.puts/2 значення, яке вона не може вивести, ми побачимо помилку Protocol.UndefinedError.

IO.puts({:ok, 7})
# ** (Protocol.UndefinedError) protocol String.Chars not implemented for {:ok, 7} of type Tuple

У такому разі варто скористатися IO.inspect/2.

IO.inspect/2 для налагодження

IO.inspect/2 ідеально підходить для налагодження, бо повертає свій аргумент без змін, уміє вивести будь-що і має опцію :label.

"HELLO\n"
|> String.trim()
|> IO.inspect(label: "step 1")
|> String.downcase()
|> IO.inspect(label: "step 2")

# > step 1: "HELLO"
# > step 2: "hello"
# => "hello"

Пристрої введення-виведення

Першим аргументом усіх цих функцій є пристрій введення-виведення, який типово має значення :stdio (стандартне введення/виведення). Щоб писати в пристрій стандартних помилок, використаймо :stderr. Пристроєм введення-виведення може бути й процес, наприклад створений викликом File.open/2, що дало б змогу писати у файл.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію IO