바이너리 프로토콜의 메시지를 디코딩하는 코드를 작성 중입니다. 각 메시지 유형에는 1 바이트 유형 식별자가 할당되며 각 메시지는이 유형 ID를 전달합니다. 메시지는 모두 5 개의 필드로 구성된 공통 헤더로 시작합니다. 내 API는 간단하다얼랭 패턴 일치 비트 문자열
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
도 오류 코드 게시시이 사실을 알았 으면 메타에 대한 질문 일 수도 있습니다 –
http://meta.stackexchange.com/questions/89117/why-do-i-get-nice-erlang 구문 색상과 관련하여 메타에 질문을 게시 함 -syntax-in-preiviev-but-not-rendered-page –