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
選項顯式設置為 true
或 false
來更改這兩種警告行為。
模棱兩可的函數/宏名稱
如果兩個模塊 A
和 B
被導入,並且它們都包含一個 foo
函數,其參數為 1
,那麽隻有在實際調用了 foo/1
時才會發出錯誤;也就是說,錯誤是懶惰地發出的,而不是即刻地發出的。
相關用法
- Elixir Kernel.SpecialForms.case用法及代碼示例
- Elixir Kernel.SpecialForms.%{}用法及代碼示例
- Elixir Kernel.SpecialForms.for用法及代碼示例
- Elixir Kernel.SpecialForms.quote用法及代碼示例
- Elixir Kernel.SpecialForms.require用法及代碼示例
- Elixir Kernel.SpecialForms.&expr用法及代碼示例
- Elixir Kernel.SpecialForms.<<args>>用法及代碼示例
- Elixir Kernel.SpecialForms.{args}用法及代碼示例
- Elixir Kernel.SpecialForms.unquote_splicing用法及代碼示例
- Elixir Kernel.SpecialForms.receive用法及代碼示例
- Elixir Kernel.SpecialForms.%struct{}用法及代碼示例
- Elixir Kernel.SpecialForms.left . right用法及代碼示例
- Elixir Kernel.SpecialForms.alias用法及代碼示例
- Elixir Kernel.SpecialForms.try用法及代碼示例
- Elixir Kernel.SpecialForms.fn用法及代碼示例
- Elixir Kernel.SpecialForms.cond用法及代碼示例
- Elixir Kernel.SpecialForms.__aliases__用法及代碼示例
- Elixir Kernel.SpecialForms.left :: right用法及代碼示例
- Elixir Kernel.SpecialForms.unquote用法及代碼示例
- Elixir Kernel.SpecialForms.with用法及代碼示例
- Elixir Kernel.SpecialForms.__block__用法及代碼示例
- Elixir Kernel.SpecialForms.^var用法及代碼示例
- Elixir Kernel.round用法及代碼示例
- Elixir Kernel.left / right用法及代碼示例
- Elixir Kernel.put_in用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.SpecialForms.import(module, opts)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。