Elixir 回退到Any

2023-12-16 20:46 更新
當(dāng)一個(gè)實(shí)現(xiàn)無法找到時(shí),@derive的替代方法是明確地告知協(xié)議回退到Any.通過在協(xié)議定義中將@fallback_to_any設(shè)置為true:
defprotocol Blank do
  @fallback_to_any true
  def blank?(data)
end

假設(shè)我們已經(jīng)像之前那樣實(shí)現(xiàn)了?Any?:

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

現(xiàn)在所有沒有實(shí)現(xiàn)Blank協(xié)議的數(shù)據(jù)類型(包括結(jié)構(gòu)體)都會被認(rèn)為是非空白的.與@derive相反,回退到Any是選擇性退出的:所有數(shù)據(jù)都得到了一個(gè)預(yù)置的行為,除非它們提供了自己的協(xié)議實(shí)現(xiàn).那種技術(shù)更好取決于使用場景,但Elixir開發(fā)者更趨向于使用顯性定義,你能看到許多庫使用@derive.


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號