查看源代码 StringIO (Elixir v1.16.2)

控制一个包装字符串的 IO 设备进程。

一个 StringIO IO 设备可以作为 "设备" 传递给 IO 模块中的大多数函数。

示例

iex> {:ok, pid} = StringIO.open("foo")
iex> IO.read(pid, 2)
"fo"

摘要

函数

停止 IO 设备并返回剩余的输入/输出缓冲区。

返回给定 IO 设备的当前输入/输出缓冲区。

刷新输出缓冲区并返回其当前内容。

创建一个 IO 设备。

创建一个 IO 设备。

函数

@spec close(pid()) :: {:ok, {binary(), binary()}}

停止 IO 设备并返回剩余的输入/输出缓冲区。

示例

iex> {:ok, pid} = StringIO.open("in")
iex> IO.write(pid, "out")
iex> StringIO.close(pid)
{:ok, {"in", "out"}}
@spec contents(pid()) :: {binary(), binary()}

返回给定 IO 设备的当前输入/输出缓冲区。

示例

iex> {:ok, pid} = StringIO.open("in")
iex> IO.write(pid, "out")
iex> StringIO.contents(pid)
{"in", "out"}
@spec flush(pid()) :: binary()

刷新输出缓冲区并返回其当前内容。

示例

iex> {:ok, pid} = StringIO.open("in")
iex> IO.write(pid, "out")
iex> StringIO.flush(pid)
"out"
iex> StringIO.contents(pid)
{"in", ""}
链接到此函数

open(string, options_or_function \\ [])

查看源代码
@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"}}
链接到此函数

open(string, options, function)

查看源代码 (自 1.7.0 起)
@spec open(binary(), keyword(), (pid() -> res)) :: {:ok, res} when res: var

创建一个 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"}}