W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
當(dāng)同時使用協(xié)議與結(jié)構(gòu)體時,Elixir的可擴展性就顯示出來了.
在之前的章節(jié),我們已經(jīng)知道盡管結(jié)構(gòu)體也是映射,但他們不和映射共享協(xié)議實現(xiàn).讓我們來定義一個和那一章中一樣的User
結(jié)構(gòu)體:
iex> defmodule User do
...> defstruct name: "john", age: 27
...> end
{:module, User,
<<70, 79, 82, ...>>, {:__struct__, 0}}
然后檢查:
iex> Blank.blank?(%{})
true
iex> Blank.blank?(%User{})
** (Protocol.UndefinedError) protocol Blank not implemented for %User{age: 27, name: "john"}
結(jié)構(gòu)體需要他們自己的協(xié)議實現(xiàn):
defimpl Blank, for: User do
def blank?(_), do: false
end
如果需要的話,你可以自己定義User的空白判斷.你還可以使用結(jié)構(gòu)體來構(gòu)建更強大的數(shù)據(jù)類型,例如隊列,然后為其實現(xiàn)所有相關(guān)的協(xié)議,例如Enumerable
或Blank
.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: