[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 這類函數去寫入。函數

相關文章
相關標籤/搜索