美文网首页Elm前置
Elixir-模块指令

Elixir-模块指令

作者: 你期待的花开 | 来源:发表于2019-02-20 18:54 被阅读10次

    Elixir提供了几种使用导入模块的方式,import,require,use,alias,这些都可以对模块进行应用。

    alias

    import 可以导入模块的所有函数,如果两个模块具有相同的函数呢,那么就需要用alias的模块别名引用函数调用。

    defmodule Math do
      alias Math.List, as: List
    end
    

    别名经常被用于定义快捷方式。实际上,不用选项as调用alias会自动指向模块名的最后一个部分,比如:

    alias Math.List
    

    等同于:

    alias Math.List, as: List
    

    注意: alias是有作用域的,别名只能在某个函数内部起作用

    import

    用import可以非常方面地直接引入其他模块中的函数和宏,该模块下的所有公有函数(def定义的函数)就在当前模块域可见了。

    import List
    

    import也支持:macros和:functions和:only一起使用。例如,要引入所有的宏,可以这么写:

    import Integer, only: :macros
    

    或这引入全部的函数:

    import Integer, only: :functions
    

    注意import也是有作用域的,这意味着我们能在特定函数内引入特定的宏:

    defmodule Math do
      def some_function do
        import List, only: [duplicate: 2]
        # call duplicate
      end
    end
    

    在上面的例子中,引入的List.duplicate/2只在那个函数内部才可见。duplicate/2对这个模块内的其他函数都是不可用的(更不用说其他的模块了)

    注意引入一个模块会自动requires它。

    require

    require 允许使用一个模块的宏, 但并不导入他们. 并且必须通过全名来引用。

    require 相对 import的差别在于并没有真正的导入模块,而是在编译链接的时候,查找对应的共享库。要使用其他模块所提供的函数和宏, 就必须要require进来。即编译加载给定的模块,因为宏展开是在编译的时候。
    require和import有部分重叠的作用,前者更多的是针对宏的操作。

    use

    在使用 elixir的一些web框架,例如Plug的时候,经常会看到使用use的对模块的操作。use其实很简单,它除了在Module上调用using宏外, 不做其他任何事情。

    总结

    elixir提供了四个模块指令,用于引用导入模块的函数或宏。

    • import 和 alias比较相近,都是导入模块的函数,其中import可以导入指定的函数,默认导入所有。
    • alias则只是把模块引用名给重命名而已,调用函数的时候还需要把别名加上。* use仅执行模块的using 宏的代码。
    • require则是对模块宏在编译时加载。

    相关文章

      网友评论

        本文标题:Elixir-模块指令

        本文链接:https://www.haomeiwen.com/subject/iwfkyqtx.html