当前位置:  开发笔记 > 编程语言 > 正文

如何将一些位连接到位串的末尾?

如何解决《如何将一些位连接到位串的末尾?》经验,为你挑选了1个好方法。

我想逐点构造一个字符串,我想知道如何这样做.

我期待语法类似于连接两个字节,如下所示:

iex(1)> <<1>> <> <<1>>
<<1, 1>>

所以我尝试过:

iex(2) <<1::1>> <> <<1::1>>
** (ArgumentError) argument error

这可能吗?提前致谢.



1> michalmuskal..:

我不确定它是否是一个错误,但让我们探索一下发生了什么,并在以后担心.

什么是<>?事实证明它只是一个定义的宏Kernel.<>/2.我们可以用宏来更好地理解它们?扩大他们!

quote(do: <<1::1>> <> <<1::1>>) 
|> Macro.expand(__ENV__) 
|> Macro.to_string
#=> "<<(<<1::1>>::binary), (<<1::1>>::binary)>>"

我们可以看到<>desugars到正常的二进制语法.对我们来说不幸的是它假设它的参数是二进制文件!我们有位串 - 因此错误.怎么解决?我们可以直接使用常规的binary/bitstring语法:

<< <<1::1>>::bitstring, <<1::1>>::bitstring >>
#=> <<3::size(2)>>

哪个按预期工作.

编辑:我跟进了这个.此行为是预期的.<>运算符旨在处理二进制而不是位串.错误是相当不愉快的,但它在Erlang内部深入.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有