Non sono esattamente sicuro se si tratta di un bug o no, ma esploriamo cosa succede e ci preoccupiamo più tardi.
Che cos'è <>
? Si scopre che è solo una macro definita in Kernel.<>/2
. Cosa possiamo fare con i macro per capirli meglio? Espandili!
quote(do: <<1::1>> <> <<1::1>>)
|> Macro.expand(__ENV__)
|> Macro.to_string
#=> "<<(<<1::1>>::binary), (<<1::1>>::binary)>>"
Possiamo vedere che <>
desugars alla normale sintassi di binario. Sfortunatamente per noi assume che gli argomenti siano binari! Abbiamo delle stringhe di bit - da qui l'errore. Come sistemarlo? Possiamo utilizzare direttamente la sintassi normale binario/bitstring:
<< <<1::1>>::bitstring, <<1::1>>::bitstring >>
#=> <<3::size(2)>>
Che funziona come previsto.
EDIT: Ho seguito su questo. Questo comportamento è previsto. L'operatore <>
è progettato per funzionare su file binari e non su stringhe di bit. L'errore è piuttosto spiacevole, ma sta arrivando in profondità da Erlang.
È fantastico grazie! Ho iniziato a percorrere quella strada, ma non avevo le capacità per arrivare dove mi hai preso. Grazie ancora! – djdrzzy