在 Elixir 中连接位串
Concatenating Bitstrings in Elixir
这段代码抛出错误:
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
为什么这段代码会失败?
如何使用变量连接位串?
(我根据mudasobwa的评论更新为示例)
How can I concatenate bitstrings using variables?
如果您有二进制文件,请使用 Kernel.<>/2
:
iex|1 ▶ a = <<1, 2>>
#⇒ <<1, 2>>
iex|2 ▶ b = <<3, 4>>
#⇒ <<3, 4>>
iex|3 ▶ a <> b
#⇒ <<1, 2, 3, 4>>
它也适用于 Kernel.SpecialForms.<<>>/1
:
iex|4 ▶ << a <> <<3, 4>> >>
#⇒ <<1, 2, 3, 4>>
或者您可以明确告诉编译器您使用二进制文件:
iex|5 ▶ << a :: binary, <<3, 4>> >>
#⇒ <<1, 2, 3, 4>>
如果你有位串,后一个选项有效:使用显式类型提示:
iex|6 ▶ a = <<18::size(7)>>
iex|7 ▶ << a :: bitstring, <<100::size(7)>> >>
#⇒ <<37, 36::size(6)>>
正确答案是使用 bitstring
类型提示:
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
iex(37)> <<a, b>>
** (ArgumentError) argument error
iex(37)> <<a::bitstring, b::bitstring>>
<<37, 36::size(6)>>
这段代码抛出错误:
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
为什么这段代码会失败?
如何使用变量连接位串?
(我根据mudasobwa的评论更新为示例)
How can I concatenate bitstrings using variables?
如果您有二进制文件,请使用 Kernel.<>/2
:
iex|1 ▶ a = <<1, 2>>
#⇒ <<1, 2>>
iex|2 ▶ b = <<3, 4>>
#⇒ <<3, 4>>
iex|3 ▶ a <> b
#⇒ <<1, 2, 3, 4>>
它也适用于 Kernel.SpecialForms.<<>>/1
:
iex|4 ▶ << a <> <<3, 4>> >>
#⇒ <<1, 2, 3, 4>>
或者您可以明确告诉编译器您使用二进制文件:
iex|5 ▶ << a :: binary, <<3, 4>> >>
#⇒ <<1, 2, 3, 4>>
如果你有位串,后一个选项有效:使用显式类型提示:
iex|6 ▶ a = <<18::size(7)>>
iex|7 ▶ << a :: bitstring, <<100::size(7)>> >>
#⇒ <<37, 36::size(6)>>
正确答案是使用 bitstring
类型提示:
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
iex(37)> <<a, b>>
** (ArgumentError) argument error
iex(37)> <<a::bitstring, b::bitstring>>
<<37, 36::size(6)>>