我剛開始學習Elixir,但有一些編程背景和幾種OOP語言,主要是Ruby。我發現的例子,我如何定義模塊內部結構:如何訪問struct定義的模塊結構[Elixir]
defmodule Example.User do
defstruct name: "Sean", roles: []
end
另外,我發現當我創建結構,我可以設置這個值: steve = %Example.User{name: "Steve", roles: [:admin, :owner]}
並且只需通過調用steve.name
的訪問外模塊問題是,我怎麼能訪問模塊內部結構數據,讓我們說,我想從call_my_name訪問名場功能:
defmodule Example.User do
defstruct name: ""
def call_my_name do
IO.write(???)
end
end
martin = %Example.User{name: "Martin"}
就OOP而言,我只是想寫一個getter。
我該怎麼辦?什麼是良好的/默認的方式來做到這一點?如果我不能,爲什麼?
感謝您的回覆,我真的很感激。我知道這不是OOP,我只是想澄清一些事情。結合數據和相關操作的好/默認方法是什麼?我應該只在模塊內部定義結構和函數,以便我可以將結構傳遞給這個函數?是否有任何確切的概念/想法,爲什麼我無法訪問數據? –
@YarTheGreat創建結構和函數以「修改」這些結構的方法是合理的。但不要試圖將結構作爲對象。我將_modify_放在引號之間,因爲在功能語言中,您不會修改數據,您只需在修改後創建原始數據的副本。 –
嘿,你還可以解釋這個函數聲明,爲什麼我們可以聲明這樣的參數:「call_my_name(%Example.User {name:name})」或者當我能夠閱讀這個表單時給我一個源代碼?它提醒我靜態樣式聲明,而我們使用動態語言。這種形式的戒備還是什麼?從未見過它。 –