我想知道Elixir是否有可能保护特定的协议.
def some_fun(f) when implement?(f, Dict.Behaviour), do: ...
Run Code Online (Sandbox Code Playgroud)
或者有什么可以断言f特别是HashDict吗?
谢谢 !
你可以做:
iex> Enumerable.impl_for!([])
Enumerable.List
Run Code Online (Sandbox Code Playgroud)
但它并不适用于警卫.但是,这通常是一种不好的做法,您应该只调用协议.
如果你特别担心HashDict,你可以这样做:is_record(dict, HashDict)它应该适用于守卫.