我有这样的Erlang代码:这个Erlang语句做了什么?
not lists:any(fun(Condition) ->Condition(Message) end, Conditions).
谁能请解释通俗地说整个语句?对于您的信息Condition
是一项功能,Conditions
是一个数组。 fun(Condition) ->Condition(Message) end
是什么意思?以及not lists:any
的含义。
我有这样的Erlang代码:这个Erlang语句做了什么?
not lists:any(fun(Condition) ->Condition(Message) end, Conditions).
谁能请解释通俗地说整个语句?对于您的信息Condition
是一项功能,Conditions
是一个数组。 fun(Condition) ->Condition(Message) end
是什么意思?以及not lists:any
的含义。
fun(Condition) ->Condition(Message) end
是函数Condition
适用于Message
的值(取为闭合对周围代码)lambda函数。
lists:any
是一个函数,它的谓词和值的列表,并呼吁依次在每个值的谓词,并返回原子true
如果任何谓词呼叫做。
总的来说,结果是原子true
如果没有的功能Condition
在用于Message
值列表Conditions
返回true
。
编辑 - 为lists:any
any(Pred, List) -> bool()
类型添加文档:
Pred = fun(Elem) -> bool()
Elem = term()
List = [term()]
返回true Pred(Elem)
返回true列表中的至少一个元素Elem
了。
条件是需要消息并返回布尔值的东西,如果它符合某些条件。
代码经过条件的列表,如果其中任何说真的,那么它返回false,而其中如果所有说假的,它说真的。
大致翻译为verbose伪Python:
这个代码看起来非常像一个Erlang实现chain-of-responsibility design pattern:
背后,你在其他的答案有语法和STDLIB描述def not_lists_any(Message,Conditions):
for Condition in Conditions:
if Condition(Message):
return False
return True
一步。该消息(在OOP sense of the word)“遍历”所有可能的处理程序(函数从Conditions
数组),直到有人可以处理它。通过笔者的惯例,它处理消息的一个返回true
(否则false
),因此,如果没有人能处理消息你的表达作为一个整体的结果是true
:
% this is your code wrapped in a function
dispatch(Message, Handlers) ->
not lists:any(fun(Condition) ->Condition(Message) end, Handlers).
它可以像这样使用:
CantHandle = dispatch(Event, Handlers),
if CantHandle->throw(cannot_handle); true->ok end.
参考:http://www.erlang.org/doc/man/lists.html#any-2 – Zed 2009-11-03 10:00:53
作为参考,这是一样的: 列表:所有(乐趣(条件) - >没有条件(消息)结束,条件)。 – 2009-11-03 12:18:02
作为参考,这是德摩根定律之一的应用:) – Zed 2009-11-03 18:03:51