IEx里的帮助

敲个h就出来啦,还是彩色的,其实启动iex的时候稍微注意下文字就能发现…

1
2
3
4
5
(master)⚡ % iex
Erlang/OTP 19 [erts-8.2.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Interactive Elixir (1.4.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

退出IEx的快捷键

因为iex继承自erlang的erl,所以退出的方法也颇为诡异,Ctrl-D都无法直接退出的

  • 连续按两次 Ctrl-C。最暴力,但估计也是用的最多的方法了
  • Ctrl-C之后根据提示,选择a。看起来比上面的方式文明不少
  • Ctrl-G之后,然后输入qerl中,Ctrl-G之后将进入作业控制模式(JCL)
    进入这种模式后,可以键入h或者?来显示帮助。
  • Ctrl-\。这种方式等同于执行:erlang:halt,看起来最接近Ctrl-D,按键次数也是最少,
    还是erlang“官方推荐”快捷键

使用IEx.pry进行调试

其实函数式语言,一般都不需要太复杂的调试(吧),因为验证了输入输出就完事了(呀)。
不过作为一个长得像ruby的语言,Elixir的IEx提供了一个简化版的pry

例如下面的代码,注意第1行,第6行:

1
2
3
4
5
6
7
8
require IEx
defmodule Adder do
def add(a, b) do
c = a + b
IEx.pry
end
end

当在iex里调用Adder.add/2时,会出现下面这样的提示

1
2
3
4
5
6
7
8
9
10
iex(1)> Adder.add(1, 2)
Request to pry #PID<0.85.0> at ooxx.exs:6
def add(a, b) do
c = a + b
IEx.pry
end
end
Allow? [Yn]

输入yAdder.add/2所在的进程便会被“撬开”,iex的shell将会被重置,
断点之前的变量和词法作用域都可以被访问到,可以在iex里进行一些计算,就像下面这样

1
2
3
4
5
pry(1)> Enum.map([a, b, c], &IO.inspect(&1))
1
2
3
[1, 2, 3]

IEx.pry/1在调用者进程中运行的,在它执行期间会阻塞住调用者,可以使用respawn释放调用者,
这个操作会启动一个新的IEx进程:

1
2
3
4
5
6
pry(2)> respawn()
Interactive Elixir (1.4.2) - press Ctrl+C to exit (type h() ENTER for help)
:ok
iex(1)> self()
#PID<0.89.0>

可以看到,之前的pid是#PID<0.85.0>,现在pid变成了#PID<0.89.0>