İkili bir dosya okuyorum ve içinde veri ilk baytını izleyen veri türünü gösteren bir yapı var. Bunu desen eşleştirmesiyle çözmeye çalışıyorum ve sorun yaşıyorum.Bir yöntem imzasında bir ikiliin parçası üzerinde eşleştirme
yapmam hiçbiri işe yarayabilir Düşündüm birkaç yolu, denedim. ["11!", "12!", "13!"]
yerine: Ben almak istiyorum
defmodule Test do
def build(<< 0x11, rest >>) do
"11!"
end
def build(<< 0x12, rest :: size(4) >>) do
"12!"
end
def build(<< type, rest >>)
when type == 0x13 do
"13!"
end
def build(bytes) do
"Unknown!"
end
end
[ << 0x11, 0x01, 0x02, 0x03, 0x04 >>,
<< 0x12, 0x01, 0x02, 0x03, 0x04 >>,
<< 0x13, 0x01, 0x02, 0x03, 0x04 >> ]
|> Enum.map(&Test.build/1)
|> IO.inspect
# => ["Unknown!", "Unknown!", "Unknown!"]
: Aşağıda benim zayıf girişimleri görebilirsiniz.
Bunlar ile eşleşen veriler sabit bir boyuttadır (bu durumda 5 toplam bayt). This SO question, toplam boyutu da belirtmem gerektiğini önerdi mi? Bunu nasıl yapacağından emin değilim.
Sonuçta, yöntemler eşleştirme yoluyla gönderilirse ilk baytın değeri umurumda değil, bu nedenle her bir yöntem gövdesinde gerçekten ihtiyaç duyduğum tek şey rest
. Neyi kaçırıyorum?
harika çalışıyor, teşekkürler! –