0

考虑以下最小的 [?] 示例:

defmodule Foo do
  def bar() do
    n = IO.read(:line) |> String.trim() |> String.to_integer()
    for _ <- 0..n - 1 do
      IO.read(:line) |> IO.write()
    end
  end
end

import ExUnit.CaptureIO
capture_io("2\nabc\ndef", Foo.bar)

我确实查看了文档,它对ExUnit.CaptureIO使用没有任何限制,但是前面列出的代码挂起,等待第一行输入,就好像它没有被输入一样。我错过了什么吗?

如果重要的话,我正在使用 Elixir 1.7.3。

4

1 回答 1

1

的第二个参数capture_io需要是一个在启用捕获的情况下运行的函数。在这里,您传入了 running 的结果Foo.bar。这会永远挂起,因为它期待来自 stdio 的输入,而这个输入永远不会到来。长话短说,您需要将其作为函数传递:

capture_io("2\nabc\ndef", &Foo.bar/0)

因为Foo.bar是一样的Foo.bar()

于 2018-10-31T23:48:38.940 回答