繁体   English   中英

来自elixir脚本的非常基本的IEx和IEx.pry会收到错误:IEx shell正在运行?

[英]Very basic IEx and IEx.pry from an elixir script gets error: IEx shell running?

我正在通过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评估代码运行文件,但它不显示测试输出。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM