erlang 列表:在错误的情况下有正确的吗?

u3r8eeie  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(109)

我在解释器中运行了下面的匿名函数和变量,并错误地得到了这么一个true语句,但为什么会这样,以及我需要改变什么:

Lst = [1,2,3].
Y = 52.
lists:any(fun(Y) -> lists:member(Y, Lst) end, Lst).
mpgws1up

mpgws1up1#

这是因为fun的参数列表中的Y遮蔽了Y的外部定义。因此,它检查是否有列表元素是列表的成员,这总是真的。
这里实际上不需要lists:any;您可以直接调用lists:member,而不调用lists:any

> lists:member(Y, Lst).
false

使用lists:any的对等用法为:

> lists:any(fun(X) -> X =:= Y end, Lst).             
false

这里,参数是X,所以我们可以从fun外部访问Y

相关问题