在 Elixir 中连接位串

why*_*ous 1 elixir binary-data

这段代码抛出错误:

 iex(35)> a = <<18::size(7)>>
     <<18::size(7)>>
 iex(36)> b = <<100::size(7)>>
     <<100::size(7)>>
 iex(37)> <<a <> b>>
     ** (ArgumentError) argument error
Run Code Online (Sandbox Code Playgroud)

为什么这段代码失败了?

如何使用变量连接位串?

(我根据mudasobwa的评论更新为示例)

Ale*_*kin 5

如何使用变量连接位串?

如果您有二进制文件,请使用Kernel.<>/2

iex|1 ? a = <<1, 2>>
#? <<1, 2>>
iex|2 ? b = <<3, 4>>
#? <<3, 4>>
iex|3 ? a <> b
#? <<1, 2, 3, 4>>
Run Code Online (Sandbox Code Playgroud)

它也适用于Kernel.SpecialForms.<<>>/1

iex|4 ? << a <> <<3, 4>> >>
#? <<1, 2, 3, 4>>
Run Code Online (Sandbox Code Playgroud)

或者,您可以明确告诉编译器您使用二进制文件:

iex|5 ? << a :: binary, <<3, 4>> >>   
#? <<1, 2, 3, 4>>
Run Code Online (Sandbox Code Playgroud)

如果您有位串,则后一个选项有效:使用显式类型提示:

iex|6 ? a = <<18::size(7)>>
iex|7 ? << a :: bitstring, <<100::size(7)>> >>
#? <<37, 36::size(6)>>
Run Code Online (Sandbox Code Playgroud)