當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Kernel.SpecialForms.import用法及代碼示例


Elixir語言中 Kernel.SpecialForms.import 相關用法介紹如下。

用法:

import(module, opts)
(宏)

從其他模塊導入函數和宏。

import/2 允許人們在不使用限定名稱的情況下輕鬆訪問其他模塊的函數或宏。

例子

如果您使用給定模塊中的多個函數,則可以導入這些函數並將它們作為本地函數引用,例如:

iex> import List
iex> flatten([1, [2], 3])
[1, 2, 3]

選擇器

默認情況下,Elixir 從給定模塊導入函數和宏,除了以下劃線開頭的函數和宏(通常是回調):

import List

開發人員可以通過唯一選項過濾以僅導入宏或函數:

import List, only: :functions
import List, only: :macros

或者,Elixir 允許開發人員將名稱/參數對傳遞給 :only:except 作為對導入(或不導入)內容的細粒度控製:

import List, only: [flatten: 1]
import String, except: [split: 2]

再次導入相同的模塊將刪除以前的導入,除非使用了 except 選項,該選項始終對先前聲明的 import/2 是獨占的。如果沒有先前的導入,則它適用於模塊中的所有函數和宏。例如:

import List, only: [flatten: 1, keyfind: 4]
import List, except: [flatten: 1]

在上麵的兩次導入調用之後,隻會導入 List.keyfind/4

下劃線函數

默認情況下,不導入以_ 開頭的函數。如果您確實要導入以_ 開頭的函數,則必須將其顯式包含在:only 選擇器中。

import File.Stream, only: [__build__: 3]

詞法範圍

重要的是要注意 import/2 是詞法的。這意味著您可以在特定函數中導入特定宏:

defmodule Math do
  def some_function do
    # 1) Disable "if/2" from Kernel
    import Kernel, except: [if: 2]

    # 2) Require the new "if/2" macro from MyMacros
    import MyMacros

    # 3) Use the new macro
    if do_something, it_works
  end
end

在上麵的示例中,我們從 MyMacros 導入宏,在該特定函數中用我們自己的替換原來的 if/2 實現。該模塊中的所有其他函數仍然可以使用原始函數。

警告

如果你導入一個模塊並且你沒有使用任何從這個模塊導入的函數或宏,Elixir 會發出一個警告,暗示這個導入沒有被使用。

如果導入是由宏自動生成的,Elixir 不會發出任何警告,因為導入沒有明確定義。

可以通過將 :warn 選項顯式設置為 truefalse 來更改這兩種警告行為。

模棱兩可的函數/宏名稱

如果兩個模塊 AB 被導入,並且它們都包含一個 foo 函數,其參數為 1 ,那麽隻有在實際調用了 foo/1 時才會發出錯誤;也就是說,錯誤是懶惰地發出的,而不是即刻地發出的。

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.SpecialForms.import(module, opts)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。