以下代码在编译时给出警告:警告:使用运算符'>'无效
rd(a,{x,y}),
List = [#a{x=1,y=2}, #a{x=3,y=4}],
lists:filter(
fun(E) ->
E#a.x > 1, E#a.y =:= 2
end, List).
Run Code Online (Sandbox Code Playgroud)
但是当我用逗号代替逗号时,没有警告.
在这种情况下使用逗号只分离两个动作,而不会相互影响:E#a.x > 1
和下一个操作(这是函数的结果)E#a.y =:= 2
这意味着在您的情况下,过滤功能等于:
fun( E ) ->
E#a.y =:= 2
end
Run Code Online (Sandbox Code Playgroud)
只有在你编写保护表达式时才使用逗号等于使用andalso
,否则 - 逗号只是动作之间的分隔符.
因此,您可以通过两种方式重写您的功能:
1)
fun
(E) when E#a.x > 1, E#a.y =:= 2 ->
true;
(_Othervise) ->
false
end
Run Code Online (Sandbox Code Playgroud)
2)
fun( E ) ->
(E#a.x > 1) andalso (E#a.y =:= 2)
end
Run Code Online (Sandbox Code Playgroud)