1
如果你定义一个类型指定和使用不同类型的参数,它会显示类似的错误:类型化列表类型指定从未打破了合同
binary() ... breaks the contract ... boolean()
例如,这类型指定:
@spec check?(binary) :: boolean
但它似乎不起作用的类型列表,或者至少,它不会显示警告,如果我有一个方法接收一个字符串列表,我会定义此类型的字符串:
@spec check?([String.t]) :: boolean
我就可以定义列表中的任何规范,它永远不会抱怨运行时透析器,即:
@spec check?(list(boolean)) :: boolean
@spec check?(list(Conn)) :: boolean
@spec check?(list(number)) :: boolean
@spec check?(list(integer)) :: boolean
是故意的吗?它看起来像如果我与任何类型的[any()]
定义的列表是否有其他的方式来实现这一目标?