我正在使用' -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并怀疑我正在削减数量,因为我能想到的唯一解决方案是一些复杂的功能保护......
任何想法或指示?
答案 0 :(得分:2)
使用-Woverspecs
时,如果您的类型比
在您的实例中,可能的情况是testU
函数在其参数与a
不同时也可以返回值。
您可能正在寻找的是-Wunderspecs
,当您的规格比Dialyzer所推断的许可时会产生警告。