我知道我的困惑是什么。我也开始使用这个网站的例子。首先我的blank.ex是
defprotocol Blank do
def blank?(data)
end
defimpl Blank, for: Integer do
def blank?(_), do: false
end
defimpl Blank, for: List do
def blank?([]), do: true
def blank?(_), do: false
end
在我编译它之后elixirc blank.ex
,它将创建这些梁文件:
Elixir.Blank.Integer.beam Elixir.Blank.List.beam Elixir.Blank.beam
其次我的blank.ex是
defprotocol Blank do
@fallback_to_any true
def blank?(data)
end
defimpl Blank, for: Any do
def blank?(_), do: true
end
我再次编译它,我得到了这些梁文件:
Elixir.Blank.Any.beam Elixir.Blank.Integer.beam Elixir.Blank.List.beam Elixir.Blank.beam
它不会删除Elixir.Blank.Integer.beam Elixir.Blank.List.beam
文件,当我在 iex 中运行时:
iex(18)> Blank.blank? [] # it uses Elixir.Blank.List.beam
true
iex(19)> Blank.blank? [6] # it uses Elixir.Blank.List.beam
false
iex(20)> Blank.blank? '12' # it uses Elixir.Blank.List.beam
false
iex(22)> Blank.blank? "' " # it uses Elixir.Blank.Any.beam
true
iex(23)> Blank.blank? "elixi" # it uses Elixir.Any.List.beam
true
iex(24)> Blank.blank? {1} # it uses Elixir.Blank.Any.beam
true
iex(25)> Blank.blank? {1, 2} # it uses Elixir.Blank.Any.beam
true
iex(26)> Blank.blank? 2 # it uses Elixir.Blank.Integer.beam
false
所以这只是因为我没有手动删除旧的梁文件。