Elixir 作為常量

2023-12-15 14:45 更新

Elixir開發(fā)者經(jīng)常會將模塊屬性當(dāng)做常量使用:

defmodule MyServer do
  @initial_state %{host: "147.0.0.1", port: 3456}
  IO.inspect @initial_state
end

注意:與Erlang不同,用戶定義的屬性不會默認(rèn)存儲在模塊中.其值只在編譯過程中存在.開發(fā)者可以調(diào)用Module.register_attribute/3來使屬性的表現(xiàn)更接近于Erlang.

試圖訪問一個未定義的屬性將會打印出一個警告:

defmodule MyServer do
  @unknown
end
warning: undefined module attribute @unknown, please remove access to @unknown or explicitly set it before access

最后,屬性也可以在函數(shù)內(nèi)部讀取:

defmodule MyServer do
  @my_data 14
  def first_data, do: @my_data
  @my_data 13
  def second_data, do: @my_data
end

MyServer.first_data #=> 14
MyServer.second_data #=> 13

注意從函數(shù)內(nèi)部讀取屬性,將會快照它們當(dāng)前的值.換句話說,該值是在編譯時而非運(yùn)行時讀取的.正如我們將看到的,這使得屬性可以被用作模塊編譯時的存儲空間.


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號