IEx初探

作者 bareilles 所属板块 学习资料
IEx作为Elixir的REPL,是Elixir开发重要的一部分。今天就来简单的说说IEx的基本功能,本人是Elixir菜鸟,说的不好请各位轻拍。 ####基本使用方法 打开IEx: 在命令行输入iex即可 打开一个命名的IEx: 在命令行输入`iex --sname _name_of_iex_node_`即可,这里的`_name_of_iex_node_`请替换成你想取的名字 退出IEx: 在IEx内使用ctrl + c 切换IEx: 在IEx内使用ctrl + g,然后可以开始新建新的IEx等等,这个会在后面继续讲到。 ####IEx 帮助函数 这个使用h()就可以,注意我们既可以对一个模块查看帮助函数,也可以对某个函数进行查看帮助函数。下面是例子: ``` iex(1)> h Integer Integer Functions for working with integers. ``` 下面的两行就是Integer这个模块的`moduledoc`。上面已经说过了,我们也可以查看某个函数: ``` iex(2)> h Integer.parse/1 def parse(bin) Converts a binary to an integer. If successful, returns a tuple of the form {integer, remainder_of_binary}. Otherwise :error. Examples ┃ iex> Integer.parse("34") ┃ {34,""} ┃ ┃ iex> Integer.parse("34.5") ┃ {34,".5"} ┃ ┃ iex> Integer.parse("three") ┃ :error ``` IO.ANSI.Docs会解析`docstring`里的特殊字符(类似markdown),所以`docstring`在IEx里会有各自字体和表现方式等等,看起来十分舒服。 #### 远程Shell IEx的一个牛逼之处就在于能连接远程的节点。让我们来看一个例子。 先新建一个命名为foo的IEx shell: ``` $ iex --sname foo iex(foo@HOST)1> ``` 如果想看我们现在这个节点的名字,输入: ``` iex(foo@HOST)1> node() :"foo@HOST" ``` 现在我们继续在当前的IEx里定义一个模块: ``` iex(foo@HOST)3> defmodule Falood do ...(foo@HOST)3> def foo, do: "hello world!" ...(foo@HOST)3> end {:module, Falood, <<70, 79, 82, 49, 0, 0, 4, 140, 66, 69, 65, 77, 69, 120, 68, 99, 0, 0, 0, 92, 131, 104, 2, 100, 0, 14, 101, 108, 105, 120, 105, 114, 95, 100, 111, 99, 115, 95, 118, 49, 108, 0, 0, 0, 2, 104, 2, ...>>, {:foo, 0}} iex(foo@HOST)4> Falood.foo "hello world!" ``` 现在新开始一个命令行,新建一个命名为bar的IEx节点: ``` $ iex --sname bar iex(bar@HOST)1> ``` 现在如果我们引用在foo这个节点的Falood.foo/0,显然这个函数不存在: ``` iex(bar@HOST)1> Falood.foo ** (UndefinedFunctionError) undefined function: Falood.foo/0 (module Falood is not available) Falood.foo() ``` 前面我们说到了ctrl + g这个功能,如果我们现在使用ctrl + g,然后用r()函数就能切换到远程的其他节点: ``` iex(bar@HOST)1> r 'foo@HOST' 'Elixir.IEx' User switch command --> r 'foo@HOST' 'Elixir.IEx' --> c Interactive Elixir (1.0.2) - press Ctrl+C to exit (type h() ENTER for help) iex(foo@HOST)1> ``` 我们看到这时候已经成功切换到了foo节点,当然我们现在使用Falood.foo/0就能成功了: ``` iex(foo@HOST)1> Falood.foo "hello world!" ``` ### 在Mix项目中使用IEx 这里有人可能会问,如果我做了个Phoenix项目,那么里面我用的包岂不是无法在IEx里可见。这个不用担心,任何Mix项目中的依赖,都可以通过指令: ``` iex -S mix ``` 来被启动的IEx shell获得。也就是说你在项目中用到的任何包里的函数,通过这个指令启动的IEx shell也都能使用。 ### 总结 这些就是目前我对IEx简单的介绍。当然IEx也有别的很帮助开发的功能,希望各位补充和轻拍。
4 回复
  • hex 发表
    远程Shell这个功能之前还不知道。顶楼主个。
  • Cifer 发表
    长知识了~~~
  • falood 发表
    `defmodule Falood` 什么鬼!之前竟然没发现!
  • dantangfan 发表
    [@falood](/users/43) 把各种陈年老帖都怼出来了,233333