IO

IO の Elixir

1個の演習

IOについて

入出力を扱う関数は、IOモジュールで提供されています。

  • IO.puts/2は、文字列を標準出力に書き込み、その後に改行を加えます。戻り値は:okです。
  • IO.write/2は、文字列を標準出力に書き込みますが、改行は加えません。戻り値は:okです。
  • IO.gets/2は、標準入力から1行読み取ります。
  • 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"

IOデバイス

これらの関数の第1引数はIOデバイスで、デフォルト値は:stdio(標準入出力)です。標準エラー出力に書き込むには、代わりに:stderrを使います。IOデバイスはプロセスでもかまいません。たとえば、File.open/2を呼び出して作成したプロセスを使えば、ファイルに書き込むこともできます。

GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

IOを学習する