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


Ljzn
399 声望102 粉丝

网络安全;函数式编程;数字货币;人工智能