Elixir 回退到Any
2023-12-16 20:46 更新
当一个实现无法找到时,
@derive
的替代方法是明确地告知协议回退到Any
.通过在协议定义中将@fallback_to_any
设置为true
:defprotocol Blank do
@fallback_to_any true
def blank?(data)
end
假设我们已经像之前那样实现了Any
:
defimpl Blank, for: Any do
def blank?(_), do: false
end
现在所有没有实现Blank
协议的数据类型(包括结构体)都会被认为是非空白的.与@derive
相反,回退到Any
是选择性退出的:所有数据都得到了一个预置的行为,除非它们提供了自己的协议实现.那种技术更好取决于使用场景,但Elixir开发者更趋向于使用显性定义,你能看到许多库使用@derive
.
以上内容是否对您有帮助:
更多建议: