在我学习Elixir的过程中,我正在和Dialyzer一起玩我的功能.在这方面,我注意到Dialyzer似乎没有检查匿名函数的类型.
在下面的例子中,我传递一个匿名函数,它将两个数字相加并返回一个数字(t::number -> number)到all?函数中.因此,我没有按照all?规范中的承诺返回布尔值(t::any -> boolean).
defmodule Exercises do
@spec all?([t::any], (t::any -> boolean)) :: boolean
def all?([], _), do: true
def all?([h|t], con) do
if con.(h) do
all?(t,con)
else
false
end
end
@spec funski() :: boolean
def funski() do
all?([1,1,2], &(&1 + 1))
end
end
Run Code Online (Sandbox Code Playgroud)
Dialyzer似乎没有报告此代码的任何错误或警告,如果Dialyzer无法检查这种错误或者我做错了什么,我很好奇.
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |