我有這樣的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