2014-09-26 59 views
0

請幫助我在Erlang上正確寫入函數。函數應該從隊列中刪除包(成功發送)。我認爲它應該是這樣,但它不起作用。二郎說:在網上非法模式3 :(Erlang:來自另一個範圍的變量函數

delete_pkts(AcksList, State) -> 
    NewSendingList = lists:filter(fun(X) -> 
    lists:any(fun(E) -> case E of X#internal_packet.message_number -> false; _ -> true end end, AcksList) 
    end, State#state.pkt_send), 
    State#state{ pkt_send = NewSendingList }. 

回答

1

我永遠無法理解爲什麼,但不能放置在一個外殼子句的記錄字段引用你可以你感興趣的領域進行匹配在功能上,而不是頭:

delete_pkts(AcksList, State) -> 
    NewSendingList = lists:filter(fun(#internal_packet{message_number = MsgNo}) -> 
    lists:any(fun(E) -> case E of MsgNo -> false; _ -> true end end, AcksList) 
    end, State#state.pkt_send), 
    State#state{ pkt_send = NewSendingList }. 

另外,作爲case表達剛剛返回false如果E火柴,true否則,您可以使用=/=操作:

delete_pkts(AcksList, State) -> 
    NewSendingList = lists:filter(fun(X) -> 
    lists:any(fun(E) -> E =/= X#internal_packet.message_number end, AcksList) 
    end, State#state.pkt_send), 
    State#state{ pkt_send = NewSendingList }. 
+1

假設message_number是記錄內部數據包中的第二個字段X#internal_packet.message_number與元素(3,X)同義,並且這是一個函數調用,它在子句中不允許 – 2014-09-26 19:59:50