咱们晓得简直每个编程语言都会有打印输出的函数,elixir 也不例外,罕用的有 IO.puts
, IO.inspect
, IO.write
等等。然而你是否晓得, 这些函数都能够在减少一个参数在第一位,从而抉择不同的 IO 设施进行读写。
IO 设施在 elixir 外面也和一般过程一样,应用音讯通信。elixir 的规范库里自带了一个 StringIO 模块,它应用 GenServer 实现了 IO 设施的通信协议,咱们能够应用这个模块启动一个虚构 IO 设施。
iex(1)> {:ok, pid} = StringIO.open("in")
{:ok, #PID<0.111.0>}
iex(3)> IO.puts pid, "hello"
:ok
iex(4)> StringIO.flush pid
"hello\n"
StringIO 过程的状态里,蕴含 input 和 output,input 相当于是用户的输出,要应用 IO.read
这类函数去读取。而 output 相当于程序的输入,应用 IO.write
这类函数去写入。