【发布时间】:2022-08-17 18:48:36
【问题描述】:
我正在处理this exercism problem 并尝试从位串中提取 7 位,在字节的开头附加一个前导/标记位,并将两者都附加到另一个累加器位串的开头。
在此过程中,我偶然发现了一个令人困惑的错误,如果我尝试指定已经是位串的东西的大小,那么它就被称为ArgumentError,这无济于事。
这是一个例子:
iex(28)> a = <<64::size(7)>>
<<64::size(7)>>
iex(29)> b = <<1::size(1)>>
<<1::size(1)>>
iex(30)> <<b::size(1), a::size(7)>>
** (ArgumentError) argument error while evaluating iex at line 30
(stdlib 4.0) eval_bits.erl:143: :eval_bits.eval_exp_field/6
(stdlib 4.0) eval_bits.erl:77: :eval_bits.create_binary/2
(stdlib 4.0) eval_bits.erl:68: :eval_bits.expr_grp/5
(stdlib 4.0) erl_eval.erl:543: :erl_eval.expr/6
(iex 1.13.4) lib/iex/evaluator.ex:310: IEx.Evaluator.handle_eval/3
iex(30> # of course, this works
iex(30)> <<b::bitstring, a::bitstring>>
<<192>>
为什么我不能指定位串的大小?似乎这对于捕捉意外尺寸很有用。
为什么错误消息如此无用?
-
这应该在即将发布的 Elixir (1.14) 版本中得到改进,我得到:
** (ArgumentError) construction of binary failed: segment 1 of type \'integer\': expected an integer but got: <<1::size(1)>>