Elixir Guard特定的协议

Klu*_*n57 1 elixir

我想知道Elixir是否有可能保护特定的协议.

def some_fun(f) when implement?(f, Dict.Behaviour), do: ...
Run Code Online (Sandbox Code Playgroud)

或者有什么可以断言f特别是HashDict吗?

谢谢 !

Jos*_*lim 5

你可以做:

iex> Enumerable.impl_for!([])
Enumerable.List
Run Code Online (Sandbox Code Playgroud)

但它并不适用于警卫.但是,这通常是一种不好的做法,您应该只调用协议.

如果你特别担心HashDict,你可以这样做:is_record(dict, HashDict)它应该适用于守卫.