我正在研究Dave Thomas的Programming Elixir,并且尝试列出列表中的一些示例。

当我学习语言时,我更喜欢通过运行<language executable> <script file>来保持基础。在这种情况下,我正在运行elixir reduce.exs

reduce.exs的内容:

require IEx;

defmodule MyList do
  def reduce([], memo, _), do: memo
  def reduce([head | tail], memo, func) do
    IEx.pry
    reduce(tail, func.(head, memo), func)
  end
end

ExUnit.start()
defmodule MyListTest do
  use ExUnit.Case

  def test do
    assert 10 == MyList.reduce([1,2,3,4], 0, &(&1 + &2))
  end
end

IO.puts(MyListTest.test())


运行控制台输出时:

Cannot pry #PID<0.70.0> at reduce.exs:9. Is an IEx shell running?


我认为我完全误解了一些核心概念,但是我不确定它们是什么。

我的期望是,程序在执行iex时将仅进入IEx.pry会话。鉴于iex位于elixir核心库中,我认为require IEx足以使用撬动。

我需要使用IEx.pry/3吗?我是否需要运行一个独立的iex实例,并以某种方式将两个节点连接在一起?

仅通过运行iex reduce.exs评估代码即可运行该文件,但它不会显示测试输出。

随时纠正我所做的任何愚蠢的假设。

最佳答案

由于正在运行IEx,因此出现此错误。使用命令iex reduce.exs将允许您输入代码以及IEx.pry在源文件中的位置。

要从那里继续执行,请在外壳中键入respawn。它会询问您是否要为每次递归允许撬动,但最终会打印出测试结果。

您事先看不到测试输出的原因是IEx.pry暂停了执行,因此您的测试功能没有返回,并且IO.puts调用尚未完成。

关于elixir - 来自elixir脚本的非常基本的IEx和IEx.pry出现错误:IEx shell正在运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42881567/

10-10 21:16