IO

IO 에서 Elixir

1개의 연습 문제

IO 소개

입출력을 다루는 함수는 IO 모듈에서 제공해요.

  • IO.puts/2는 표준 출력에 문자열을 쓰고, 뒤에 줄바꿈을 붙여요. :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"

IO 장치

이 함수들 모두의 첫 번째 인자는 IO 장치이고, 기본값은 :stdio(표준 입출력)예요. 표준 오류 장치에 쓰려면 대신 :stderr를 사용해요. IO 장치는 프로세스일 수도 있는데, 예를 들어 File.open/2를 호출해 만든 프로세스라면 파일에 쓸 수 있어요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요

IO 배우기