Dialyzer 是否分析匿名函数?
Does Dialyzer analyze anonymous functions?
在我学习 Elixir 的过程中,我正在使用 Dialyzer 来为我的函数添加类型。在这方面,我注意到 Dialyzer 似乎不检查匿名函数的类型。
在下面的示例中,我将一个匿名函数传递给 all?
函数,该函数将两个数字和 returns 一个数字 (t::number -> number)
相加。因此,我不会像 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
Dialyzer 似乎没有报告此代码的任何错误或警告,如果 Dialyzer 无法检查此类错误或者我做错了什么,我很好奇。
这似乎是透析器的一个错误。调用 :lists.all/2
(交换参数)会产生正确的警告,但由于某种原因,使用相同规范调用本地 all?/2
函数不会。
在我学习 Elixir 的过程中,我正在使用 Dialyzer 来为我的函数添加类型。在这方面,我注意到 Dialyzer 似乎不检查匿名函数的类型。
在下面的示例中,我将一个匿名函数传递给 all?
函数,该函数将两个数字和 returns 一个数字 (t::number -> number)
相加。因此,我不会像 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
Dialyzer 似乎没有报告此代码的任何错误或警告,如果 Dialyzer 无法检查此类错误或者我做错了什么,我很好奇。
这似乎是透析器的一个错误。调用 :lists.all/2
(交换参数)会产生正确的警告,但由于某种原因,使用相同规范调用本地 all?/2
函数不会。