我在解释器中运行了下面的匿名函数和变量,并错误地得到了这么一个true语句,但为什么会这样,以及我需要改变什么:
Lst = [1,2,3]. Y = 52. lists:any(fun(Y) -> lists:member(Y, Lst) end, Lst).
mpgws1up1#
这是因为fun的参数列表中的Y遮蔽了Y的外部定义。因此,它检查是否有列表元素是列表的成员,这总是真的。这里实际上不需要lists:any;您可以直接调用lists:member,而不调用lists:any:
fun
Y
lists:any
lists:member
> lists:member(Y, Lst). false
使用lists:any的对等用法为:
> lists:any(fun(X) -> X =:= Y end, Lst). false
这里,参数是X,所以我们可以从fun外部访问Y。
X
1条答案
按热度按时间mpgws1up1#
这是因为
fun
的参数列表中的Y
遮蔽了Y
的外部定义。因此,它检查是否有列表元素是列表的成员,这总是真的。这里实际上不需要
lists:any
;您可以直接调用lists:member
,而不调用lists:any
:使用
lists:any
的对等用法为:这里,参数是
X
,所以我们可以从fun外部访问Y
。