W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Elixir開發(fā)者經(jīng)常會(huì)將模塊屬性當(dāng)做常量使用:
defmodule MyServer do
@initial_state %{host: "147.0.0.1", port: 3456}
IO.inspect @initial_state
end
注意:與Erlang不同,用戶定義的屬性不會(huì)默認(rèn)存儲(chǔ)在模塊中.其值只在編譯過程中存在.開發(fā)者可以調(diào)用
Module.register_attribute/3
來使屬性的表現(xiàn)更接近于Erlang.
試圖訪問一個(gè)未定義的屬性將會(huì)打印出一個(gè)警告:
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)部讀取屬性,將會(huì)快照它們當(dāng)前的值.換句話說,該值是在編譯時(shí)而非運(yùn)行時(shí)讀取的.正如我們將看到的,這使得屬性可以被用作模塊編譯時(shí)的存儲(chǔ)空間.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: