[elixir! #0068] 来去皆消息,使用 StringIO 制造虚拟的 IO 设备

咱们知道几乎每一个编程语言都会有打印输出的函数,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 这类函数去写入。函数