我正在編寫代碼來解碼來自二進制協議的消息。每個消息類型被分配一個1字節的類型標識符,每個消息攜帶這個類型標識符。消息全部以由5個字段組成的公共頭開始。我的API很簡單:Erlang模式匹配bitstrings
decoder:decode(Bin :: binary()) -> my_message_type() | {error, binary()}`
我的第一本能是通過寫一個解碼功能爲每個郵件類型倚重模式匹配,並以該消息類型的樂趣參數
decode(<<Hdr1:8, ?MESSAGE_TYPE_ID_X:8, Hdr3:8, Hdr4:8, Hdr5:32,
TypeXField1:32, TypeXFld2:32, TypeXFld3:32>>) ->
#message_x{hdr1=Hdr1, hdr3=Hdr3 ... fld4=TypeXFld3};
decode(<<Hdr1:8, ?MESSAGE_TYPE_ID_Y:8, Hdr3:8, Hdr4:8, Hdr5:32,
TypeYField1:32, TypeYFld2:16, TypeYFld3:4, TypeYFld4:32
TypeYFld5:64>>) ->
#message_y{hdr1=Hdr1, hdr3=Hdr3 ... fld5=TypeYFld5}.
注完全解碼儘管消息的前5個字段在結構上是相同的,但其後的字段對於每種消息類型都不相同。
我有大約20個消息類型,因此20個函數類似於上面。我是用這種結構多次解碼完整的信息嗎?這是慣用的嗎?我只能解碼函數頭中的消息類型字段,然後解碼消息正文中的完整消息嗎?
元問題:當我編輯這篇文章時,我在預覽中獲得了不錯的erlang代碼着色,但是在我發佈後,在渲染頁面中沒有。幫幫我? – mpm 2011-04-28 02:40:40
在發佈erlang代碼時也注意到了這一點,可能是meta – 2011-04-28 11:08:20
的問題在meta上發佈了關於語法着色的問題http://meta.stackexchange.com/questions/89117/why-do-i-get-nice-erlang -syntax-coloring-in-preiviev-but-in-the-rendered-page – 2011-04-28 14:11:54