Elixir 标准输入和标准输出

问题描述 投票:0回答:1

仍然是 Elixir 的新手。到目前为止,我的理解是,我们使用

input = IO.read(:stdio,:line)
使用标准输入,并使用
IO.puts(line)
将一行写入标准输出。现在我在 elexir hexdocs 中找到了以下示例,用于在 stdout 上生成 stdin 的大写版本:

stream = IO.stream(:stdio, :line)
for line <- stream, into: stream do
  String.upcase(line) <> "\n"
end

这是我对这段代码的部分理解:第一行告诉我们

stream
是一个代表所有stdin的Stream。这是一个 Enumerable,因此推导式
for line <- stream
会连续生成各个行。

令我困惑的是

into: stream
条款。这意味着上面定义的相同标准输入流现在用作收集器,并且我没有看到任何实际将某些内容放入标准输出的内容(没有
IO.puts
)。

stream
是否以某种方式神秘地同时代表标准输入和标准输出?

elixir
1个回答
0
投票

是的,您的分析是正确的(这就是为什么它被命名为

:stdio
而不是
:stdin
:stdout
)。 要检查这一点,您必须从 IO 文档(“Elixir 提供 :stdio 和 :stderr 作为 Erlang 的 :standard_io 和 :standard_error 的快捷方式。”)开始到 Erlang io 文档(“默认情况下,发送的所有 I/O to standard_io 将出现在生成调用进程的节点的用户 I/O 设备中。”)

© www.soinside.com 2019 - 2024. All rights reserved.