我有以下代碼從具有值等於Accountnumber的字段的記錄列表中返回記錄。使用過濾器的Erlang記錄處理
lookup(AccountNumber, [#account{no=AccountNumber} = Rec | _]) ->
Rec;
lookup(AccountNumber, [_| T]) ->
lookup(AccountNumber, T);
lookup(AccountNumber, []) ->
not_found.
上面的代碼工作正常,但是當我嘗試將其轉換使用下面的代碼進行過濾:
lookup(AccountNumber, DBRef) ->
lists:filter(fun(#account{no=AccountNumber} = Rec) -> Rec end, DBRef).
我得到了以下錯誤:
** exception error: no case clause matching #account{no = 2,balance = 0,pin = undefined,name = "Ali",
transactions = []}
in function lists:'-filter/2-lc$^0/1-0-'/2 (lists.erl, line 1271)
什麼錯誤原因?
雖然它可能是誘人重寫像上面使用像圖公知的功能的一個遞歸函數,摺疊和過濾器,請記住,'filter'會發現* *所有匹配的元素,這意味着它總是搜索整個列表。 (這也意味着它可以返回多個命中,而不僅僅是第一個!) – 2013-02-27 17:17:52