Elixir 協(xié)議與結(jié)構(gòu)體

2023-12-15 14:59 更新

當(dāng)同時(shí)使用協(xié)議與結(jié)構(gòu)體時(shí),Elixir的可擴(kuò)展性就顯示出來了.

在之前的章節(jié),我們已經(jīng)知道盡管結(jié)構(gòu)體也是映射,但他們不和映射共享協(xié)議實(shí)現(xiàn).讓我們來定義一個(gè)和那一章中一樣的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é)議實(shí)現(xiàn):

defimpl Blank, for: User do
  def blank?(_), do: false
end

如果需要的話,你可以自己定義User的空白判斷.你還可以使用結(jié)構(gòu)體來構(gòu)建更強(qiáng)大的數(shù)據(jù)類型,例如隊(duì)列,然后為其實(shí)現(xiàn)所有相關(guān)的協(xié)議,例如EnumerableBlank.


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號