Tôi tự hỏi liệu có cách nào để hỏi Elixir liệu đối tượng này có triển khai giao thức, giống như obj |> implements(Enumerable)
không?Làm cách nào để kiểm tra xem giao thức có được triển khai không?
Về cơ bản, tôi phải phân biệt cấu trúc và bản đồ. Giải pháp Tôi hiện đang có là kinda xấu xí:
try
obj |> Enum.each ...
rescue
e in Protocol.UndefinedError -> obj |> Maps.keys ...
end
Các công trình trên, nhưng tôi muốn sử dụng mô hình kết hợp như:
cond do
obj |> is_implemented(Enumerable) -> ...
_ -> ...
end
Tôi có thiếu cái gì? Có thể kiểm tra một cách rõ ràng xem giao thức mong muốn có được thực hiện bởi đối tượng không?
Perfect, cảm ơn. Tôi tự hỏi tại sao nó bị thiếu tại http://elixir-lang.org/docs/stable/elixir/Enumerable.html – mudasobwa
Có lẽ vì https://github.com/elixir-lang/elixir/blob/d02be44dd5deb763e5a0eb03f3c716506d781d08/lib/elixir /lib/protocol.ex#L430. – Dogbert