我試圖在衛兵中使用記錄,如此處所述[1]。如果我使用有描述的縮寫形式:衛兵的記錄
handle(Msg, State) when Msg==#msg{to=void, no=3} ->
...我從來沒有一場比賽......但是,如果我把它完全擴展爲:
handle(Msg, State) when Msg#msg.to==void, Msg#msg.no==3 ->
...一切都很好。就像我對大多數erlang文檔所做的那樣,我讀錯了嗎?
感謝, --tim
[1] - http://www1.erlang.org/doc/reference_manual/records.html#id2278275
只是一種猜測,但你的第一個匹配假定記錄中沒有其他字段或所有其他字段都設置爲未定義。 如果msg記錄有其他字段會導致它失敗。 – 2010-03-23 17:29:45
謝謝傑里米,那一定是(還有其他有價值的領域),我認爲它們在語義上是等價的。再次感謝...... – Tim 2010-03-23 17:35:27
就像進一步的注意事項一樣,您可以使用函數簽名中的模式匹配來完成此操作。這場比賽失敗了,因爲它進行了平等測試。您可能已被視覺相似度==爲平等和=在模式匹配中的綁定絆倒。 – 2010-03-23 20:42:44