Elixir-模塊指令

Elixir提供了幾種使用導入模塊的方式,import,require,use,alias,這些都可以對模塊進行應用。

alias

import 可以導入模塊的所有函數(shù),如果兩個模塊具有相同的函數(shù)呢,那么就需要用alias的模塊別名引用函數(shù)調(diào)用。

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

別名經(jīng)常被用于定義快捷方式。實際上,不用選項as調(diào)用alias會自動指向模塊名的最后一個部分,比如:

alias Math.List

等同于:

alias Math.List, as: List

注意: alias是有作用域的,別名只能在某個函數(shù)內(nèi)部起作用

import

用import可以非常方面地直接引入其他模塊中的函數(shù)和宏,該模塊下的所有公有函數(shù)(def定義的函數(shù))就在當前模塊域可見了。

import List

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

import Integer, only: :macros

或這引入全部的函數(shù):

import Integer, only: :functions

注意import也是有作用域的,這意味著我們能在特定函數(shù)內(nèi)引入特定的宏:

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

在上面的例子中,引入的List.duplicate/2只在那個函數(shù)內(nèi)部才可見。duplicate/2對這個模塊內(nèi)的其他函數(shù)都是不可用的(更不用說其他的模塊了)

注意引入一個模塊會自動requires它。

require

require 允許使用一個模塊的宏, 但并不導入他們. 并且必須通過全名來引用。

require 相對 import的差別在于并沒有真正的導入模塊,而是在編譯鏈接的時候,查找對應的共享庫。要使用其他模塊所提供的函數(shù)和宏, 就必須要require進來。即編譯加載給定的模塊,因為宏展開是在編譯的時候。
require和import有部分重疊的作用,前者更多的是針對宏的操作。

use

在使用 elixir的一些web框架,例如Plug的時候,經(jīng)常會看到使用use的對模塊的操作。use其實很簡單,它除了在Module上調(diào)用using宏外, 不做其他任何事情。

總結(jié)

elixir提供了四個模塊指令,用于引用導入模塊的函數(shù)或宏。

  • import 和 alias比較相近,都是導入模塊的函數(shù),其中import可以導入指定的函數(shù),默認導入所有。
  • alias則只是把模塊引用名給重命名而已,調(diào)用函數(shù)的時候還需要把別名加上。* use僅執(zhí)行模塊的using 宏的代碼。
  • require則是對模塊宏在編譯時加載。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容