╮(╯3╰)╭

虽然不太明白,但是好厉害啊

IEx的一些Tips

1 IEx里的帮助

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

(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)>

2 退出IEx的快捷键

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

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

3 使用IEx.pry进行调试

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

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

require IEx

defmodule Adder do
  def add(a, b) do
    c = a + b
    IEx.pry
  end
end

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

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]

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

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

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

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>=。

Comments

comments powered by Disqus