【发布时间】:2018-01-03 18:05:09
【问题描述】:
您可以在方法中对特定结构进行模式匹配,以防止某些类型错误的泄漏。例如。 def f(z_struct = %Z{}) do ...。
如果你不知道结构的类型,你能做类似的事情吗?比如说,如果你想要一个实现协议P的模块的结构。?
defprotocol P do
# ...
end
defmodule A do
defstruct :a
end
defimpl P, for: A do
# ...
end
defmodule B do
defstruct :b
end
defimpl P, for: B do
# ...
end
defmodule SomeMod do
def m(p) do
# ...
end
end
即方法 SomeMod.m/1 应该只接受 %A{} 或 %B{} 作为参数。如果模块C 稍后实现P,m/1 应该接受C 而无需更改代码。
我们可以做这个灵药吗?
如果上面的解释不好,可以把它想象成在Java中接受一个接口,其中P是接口,A和B是实现P的类。
【问题讨论】:
标签: pattern-matching elixir protocols