在我学习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 次 |
最近记录: |