不能打印二进制变量

Yug*_*ari 4 elixir

我有一个简单的变量声明

h = "a"
Run Code Online (Sandbox Code Playgroud)

当我试图给<<h>>我弄

> ** (ArgumentError) argument error
>     (stdlib) eval_bits.erl:101: :eval_bits.eval_exp_field1/6
>     (stdlib) eval_bits.erl:92: :eval_bits.eval_field/3
>     (stdlib) eval_bits.erl:68: :eval_bits.expr_grp/4
>     (stdlib) erl_eval.erl:484: :erl_eval.expr/5
>     (iex) lib/iex/evaluator.ex:257: IEx.Evaluator.handle_eval/5
>     (iex) lib/iex/evaluator.ex:237: IEx.Evaluator.do_eval/3
Run Code Online (Sandbox Code Playgroud)

如果h"a"这里保留值,我可以成功执行操作,<<"a">>为什么会出错<<h>>呢?

Ada*_*hip 8

<< >> / 1类型开始

如果未指定类型,则默认值为整数:

iex> <<1, 2, 3>>
<<1, 2, 3>>
Run Code Online (Sandbox Code Playgroud)

Elixir缺省还接受该段为文字字符串或文字字符列表,默认情况下将其扩展为整数:

iex> <<0, "foo">>
<<0, 102, 111, 111>>
Run Code Online (Sandbox Code Playgroud)

变量或任何其他类型需要明确标记:

iex> rest = "oo"
iex> <<102, rest>>
** (ArgumentError) argument error
Run Code Online (Sandbox Code Playgroud)

我们可以通过将其显式标记为二进制来解决此问题:

iex> rest = "oo"
iex> <<102, rest::binary>>
"foo"
Run Code Online (Sandbox Code Playgroud)