2009-11-03 85 views
2

我有這樣的Erlang代碼:這個Erlang語句做了什麼?

not lists:any(fun(Condition) ->Condition(Message) end, Conditions). 

誰能請解釋通俗地說整個語句?對於您的信息Condition是一項功能,Conditions是一個數組。 fun(Condition) ->Condition(Message) end是什麼意思?以及not lists:any的含義。

+0

參考:http://www.erlang.org/doc/man/lists.html#any-2 – Zed 2009-11-03 10:00:53

+0

作爲參考,這是一樣的: 列表:所有(樂趣(條件) - >沒有條件(消息)結束,條件)。 – 2009-11-03 12:18:02

+0

作爲參考,這是德摩根定律之一的應用:) – Zed 2009-11-03 18:03:51

回答

6
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了。

+0

呃結果是倒置的(「不列出::任何(..」 – Will 2009-11-03 08:07:37

+0

對於閱讀困難:「總的來說,結果是真的,如果_none_ of條件函數返回true「 – 2009-11-03 08:20:59

+0

你編輯了你的帖子Steve?我沒有看到'edit'diff的東西 – Will 2009-11-03 09:03:34

1

條件是需要消息並返回布爾值的東西,如果它符合某些條件。

代碼經過條件的列表,如果其中任何說真的,那麼它返回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 
1

一步。該消息(在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.