Elixir,Dialyzer,类型和子类型警告

时间:2016-04-05 10:44:16

标签: types 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并怀疑我正在削减数量,因为我能想到的唯一解决方案是一些复杂的功能保护......

任何想法或指示?

1 个答案:

答案 0 :(得分:2)

使用-Woverspecs时,如果您的类型比限制性更严重,则会收到警告。

在您的实例中,可能的情况是testU函数在其参数与a不同时也可以返回值。

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