我正在通过Dave Thomas的编程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
足以使用pry。
我需要使用IEx.pry/3
吗?我是否需要运行一个单独的iex实例并以某种方式将两个节点连接在一起?
只是通过运行iex reduce.exs
来评估代码会运行该文件,但它不会显示测试输出。
随意纠正我所做的任何愚蠢的假设。
答案 0 :(得分:3)
您收到此错误是因为需要运行IEx
。使用命令iex reduce.exs
将允许您输入代码以及IEx.pry
放置在源文件中的位置。
要继续执行,请在shell中输入respawn
。它会询问您是否要允许每次递归的pry,但最终会打印出测试结果。
您之前未看到测试输出的原因是IEx.pry
停止执行,因此您的测试功能未返回且IO.puts
调用没有&# 39;完成。