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的评论更新为示例)
如何使用变量连接位串?
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)