作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望添加规范永远不会降低安全性,但这正是以下情况发生的情况。
在下面的代码中, Dialyzer (错误地)相信我 bar 的返回类型是 1
。这导致它说 foo() 中的模式永远不能匹配 - 如果注意不正确的建议,将引入运行时错误!
-module(sample).
-export([foo/0]).
foo() ->
case bar() of
1 -> ok;
2 -> something
end.
-spec bar() -> 1.
bar() ->
rand:uniform(2).
删除
bar/0
的规范可以解决问题——但为什么 Dialyzer 信任我?
最佳答案
Dialyzer 在检查其规范之前计算每个函数的成功类型,此操作有几种可能的结果:
-Wunderspecs
或 -Wspecdiffs
-Woverspecs
或 -Wspecdiffs
发出警告。 -1..1
和 pos_integer()
):同 2. rand:uniform(2)
只能返回
1
)。你可以用
{dialyzer, [{warnings, [underspecs,overspecs]}]}.
在
rebar.config
文件中
关于erlang - 为什么 Dialyzer 相信具有过于具体的返回类型的规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65329336/
我正在使用 PHPMailer 从我的脚本中通过 SMTP 发送电子邮件。有问题的电子邮件实际上是使用电子邮件到 SMS 网关的手机号码。现在,理想情况下,我想建立一个大的密件抄送列表,以一批发送所有
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我是一名优秀的程序员,十分优秀!