我知道,标题很糟糕......不知道如何解释我在问什么,那么一些代码怎么样?
设置:
L = [1,2,3,4,5,6,7,8,9].
X = 5.
Y = 10.
这就是我现在正在做的事情:
lists:any(fun(Z) when Z == X -> true; (_) -> false end, L). => true
lists:any(fun(Z) when Z == Y -> true; (_) -> false end, L). => false
我想做的是这样的事情没有保护声明(我不知道为什么,只是好奇是否可能。
我想知道你是否可以做这样的事情(是的,我知道有趣的X中的X会产生一个本地范围的变量):
lists:any(fun(X) -> true; (_) -> false end, L).
答案 0 :(得分:7)
这个特别的可以写成:
lists:any(fun(Z) -> Z =:= X end, L).
答案 1 :(得分:4)
回答你的主要问题:这是不可能的。在fun子句的头部,所有变量都被视为新变量,并将隐藏环境中的任何现有绑定。您必须使用保护来将捕获的变量与参数变量匹配。