シンプルなプロトコルでは、2 種類のダイアライザー警告が表示されます。
defmodule Dtest do
defprotocol Valid do
@doc "Returns true if data is in a valid state"
def valid?(data)
end
defimpl Valid, for: Integer do
def valid?(_), do: true
end
end
私が理解できない警告はこれです:
dtest.ex:2: The specification for
'Elixir.Dtest.Valid':'__protocol__'/1 states that the function might
also return 'true' but the inferred return is
'Elixir.Dtest.Valid' | 'false' | [{'valid?',1},...]
@spec
また、警告を黙らせるためにここで機能する a もわかりませんでした。
他の種類の警告は、他の場所で議論されています – 多くの「未知の機能」がリストされています:
Unknown functions:
'Elixir.Dtest.Valid.Atom':'__impl__'/1
'Elixir.Dtest.Valid.BitString':'__impl__'/1
(等。)
@spec
で使用できるはありdefprotocol
ますか? 例は見つかりませんでした。または、ソースコードで、defprotocol
ダイアライザーによって無視されるようにマークする方法はありますか?
編集:最初のエラーの完全な修正は次のとおりです。
defmodule Dtest do
defprotocol Valid do
@doc "Returns true if data is in a valid state"
@dialyzer {:nowarn_function, __protocol__: 1}
def valid?(data)
end
defimpl Valid, for: Integer do
def valid?(_), do: true
end
end