查看源代码 StringIO (Elixir v1.16.2)
控制一个包装字符串的 IO 设备进程。
一个 StringIO
IO 设备可以作为 "设备" 传递给 IO
模块中的大多数函数。
示例
iex> {:ok, pid} = StringIO.open("foo")
iex> IO.read(pid, 2)
"fo"
摘要
函数
停止 IO 设备并返回剩余的输入/输出缓冲区。
示例
iex> {:ok, pid} = StringIO.open("in")
iex> IO.write(pid, "out")
iex> StringIO.close(pid)
{:ok, {"in", "out"}}
返回给定 IO 设备的当前输入/输出缓冲区。
示例
iex> {:ok, pid} = StringIO.open("in")
iex> IO.write(pid, "out")
iex> StringIO.contents(pid)
{"in", "out"}
刷新输出缓冲区并返回其当前内容。
示例
iex> {:ok, pid} = StringIO.open("in")
iex> IO.write(pid, "out")
iex> StringIO.flush(pid)
"out"
iex> StringIO.contents(pid)
{"in", ""}
@spec open( binary(), keyword() ) :: {:ok, pid()}
@spec open(binary(), (pid() -> res)) :: {:ok, res} when res: var
创建一个 IO 设备。
string
将是新创建设备的初始输入。
options_or_function
可以是选项的关键字列表或函数。
如果提供选项,结果将是 {:ok, pid}
,返回创建的 IO 设备。当 :capture_prompt
选项设置为 true
时,提示(作为 IO.get*
函数的参数指定)将包含在设备的输出中。
如果提供函数,将创建设备并将其发送给函数。当函数返回时,设备将被关闭。最终结果将是一个元组,包含 :ok
和函数的结果。
示例
iex> {:ok, pid} = StringIO.open("foo")
iex> IO.gets(pid, ">")
"foo"
iex> StringIO.contents(pid)
{"", ""}
iex> {:ok, pid} = StringIO.open("foo", capture_prompt: true)
iex> IO.gets(pid, ">")
"foo"
iex> StringIO.contents(pid)
{"", ">"}
iex> StringIO.open("foo", fn pid ->
...> input = IO.gets(pid, ">")
...> IO.write(pid, "The input was #{input}")
...> StringIO.contents(pid)
...> end)
{:ok, {"", "The input was foo"}}
创建一个 IO 设备。
string
将是新创建设备的初始输入。
将创建设备并将其发送给给定的函数。当函数返回时,设备将被关闭。最终结果将是一个元组,包含 :ok
和函数的结果。
选项
:capture_prompt
- 如果设置为true
,则提示(指定为IO.get*
函数的参数)将被捕获到输出中。默认值为false
。:encoding
(自 v1.10.0 起) - IO 设备的编码。允许的值为:unicode
(默认)和:latin1
。
示例
iex> StringIO.open("foo", [], fn pid ->
...> input = IO.gets(pid, ">")
...> IO.write(pid, "The input was #{input}")
...> StringIO.contents(pid)
...> end)
{:ok, {"", "The input was foo"}}
iex> StringIO.open("foo", [capture_prompt: true], fn pid ->
...> input = IO.gets(pid, ">")
...> IO.write(pid, "The input was #{input}")
...> StringIO.contents(pid)
...> end)
{:ok, {"", ">The input was foo"}}