我们知道几乎每个编程语言都会有打印输出的函数,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
这类函数去写入。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。