Elixir,Dialyzer,类型和分型警告



我正在运行带有"-Woverspecs"的Dialyzer,并收到此警告:

room_channel.ex:143:
Type specification 'Elixir.Backend.RoomChannel':
testU(a) -> a when is_subtype(a,#{})
is a subtype of the success typing: 'Elixir.Backend.RoomChannel':testU(_) -> any()

使用此代码:

@spec testU( a ) :: a when a: %Backend.User{}
def testU(u) do
...

我想做的是用一个保护来确定函数类型,这样子类型的警告就消失了,我对我的函数有了一个精确的定义。

我在Erlang文档中看到-Woverspecs是不受鼓励的,我怀疑我在切中要害,因为我能想到的唯一解决方案是一些复杂的函数保护。。。

有什么想法或建议吗?

使用-Woverspecs,当您的类型比Dialyzer自己的分析推断的限制性更强时,您会收到警告。

在您的例子中,当testU函数的参数与a不同时,它可能也会返回一个值。

您可能正在寻找的是-Wunderspecs,当您的规范比Dialyzer所能推断的更为严格时,它会产生警告。

相关内容

  • 没有找到相关文章

最新更新