【问题标题】:Very basic IEx and IEx.pry from an elixir script gets error: IEx shell running?来自 elixir 脚本的非常基本的 IEx 和 IEx.pry 出现错误:IEx shell 正在运行?
【发布时间】:2017-08-10 10:20:00
【问题描述】:

我正在研究 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.pry 时会进入iex 会话。鉴于 iex 在 elixir 核心库中,我认为 require IEx 足以使用 pry。

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

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

请随时纠正我所做的所有愚蠢假设。

【问题讨论】:

    标签: elixir elixir-iex


    【解决方案1】:

    您收到此错误是因为需要运行 IEx。使用命令iex reduce.exs 将允许您输入代码以及IEx.pry 在源文件中的位置。

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

    您之前没有看到测试输出的原因是IEx.pry 停止执行,因此您的测试函数没有返回并且IO.puts 调用没有完成。

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 1970-01-01
      • 2021-04-15
      • 2023-03-26
      • 2019-03-26
      • 2021-03-22
      • 1970-01-01
      • 2018-11-17
      • 2016-11-24
      相关资源
      最近更新 更多