Elixir語言中 Kernel.defmodule 相關用法介紹如下。
用法:
defmodule(alias, do_block)
(宏)
用給定的內容定義一個由名稱給定的模塊。
該宏定義了一個以給定alias 作為其名稱並具有給定內容的模塊。它返回一個包含四個元素的元組:
:module- 模塊名稱
 - 模塊的二進製內容
 - 評估內容塊的結果
 
例子
defmodule Number do
  def one, do: 1
  def two, do: 2
end
#=> {:module, Number, <<70, 79, 82, ...>>, {:two, 0}}
Number.one()
#=> 1
Number.two()
#=> 2
嵌套
將一個模塊嵌套在另一個模塊中會影響嵌套模塊的名稱:
defmodule Foo do
  defmodule Bar do
  end
end
在上麵的示例中,創建了兩個模塊 - Foo 和 Foo.Bar。嵌套時,Elixir 會自動為內部模塊創建一個別名,允許第二個模塊 Foo.Bar 在定義它的相同詞法範圍(Foo 模塊)中作為 Bar 訪問。僅當嵌套模塊通過別名定義時才會發生這種情況。
如果Foo.Bar 模塊被移動到其他地方,Foo 模塊中對Bar 的引用需要更新為完全限定名稱(Foo.Bar);或者必須借助   在 Kernel.SpecialForms.alias/2 Foo 模塊中顯式設置別名。
defmodule Foo.Bar do
  # code
end
defmodule Foo do
  alias Foo.Bar
  # code here can refer to "Foo.Bar" as just "Bar"
end
動態名稱
Elixir 模塊名稱可以動態生成。這在使用宏時非常有用。例如,可以寫:
defmodule String.to_atom("Foo#{1}") do
  # contents ...
end
隻要作為第一個參數傳遞給   的表達式計算為原子,Elixir 將接受任何模塊名稱。請注意,當使用動態名稱時,Elixir 不會將名稱嵌套在當前模塊下,也不會自動設置別名。defmodule/2 
保留的模塊名稱
如果您嘗試定義一個已經存在的模塊,您將收到一條警告,指出模塊已被重新定義。
Elixir 目前還沒有實現一些模塊,但將來可能會實現。這些模塊是保留的,定義它們會導致編譯錯誤:
defmodule Any do
  # code
end
** (CompileError) iex:1: module Any is reserved and cannot be defined
Elixir 保留以下模塊名稱:Elixir、Any、BitString、PID 和 Reference。
相關用法
- Elixir Kernel.defmacro用法及代碼示例
 - Elixir Kernel.defexception用法及代碼示例
 - Elixir Kernel.defdelegate用法及代碼示例
 - Elixir Kernel.defguard用法及代碼示例
 - Elixir Kernel.defoverridable用法及代碼示例
 - Elixir Kernel.defstruct用法及代碼示例
 - Elixir Kernel.defp用法及代碼示例
 - Elixir Kernel.def用法及代碼示例
 - Elixir Kernel.destructure用法及代碼示例
 - Elixir Kernel.div用法及代碼示例
 - Elixir Kernel.SpecialForms.case用法及代碼示例
 - Elixir Kernel.round用法及代碼示例
 - Elixir Kernel.left / right用法及代碼示例
 - Elixir Kernel.put_in用法及代碼示例
 - Elixir Kernel.tl用法及代碼示例
 - Elixir Kernel.left - right用法及代碼示例
 - Elixir Kernel.tuple_size用法及代碼示例
 - Elixir Kernel.to_charlist用法及代碼示例
 - Elixir Kernel.base ** exponent用法及代碼示例
 - Elixir Kernel.left !== right用法及代碼示例
 - Elixir Kernel.if用法及代碼示例
 - Elixir Kernel.spawn_monitor用法及代碼示例
 - Elixir Kernel.to_string用法及代碼示例
 - Elixir Kernel.length用法及代碼示例
 - Elixir Kernel.first..last用法及代碼示例
 
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.defmodule(alias, do_block)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
