我想知道是否有一种方法可以问 Elixir,这个对象是否实现了那个协议,类似于 obj |> implements(Enumerable)
这样的方式?
基本上,我需要区分结构体和哈希表。我目前有一个解决方案,但它有点丑陋:
try
obj |> Enum.each ...
rescue
e in Protocol.UndefinedError -> obj |> Maps.keys ...
end
上述方法可行,但我更倾向于使用模式匹配,如下:
cond do
obj |> is_implemented(Enumerable) -> ...
_ -> ...
end
我是否漏掉了什么?我能否明确地检查对象是否实现了所需协议?