Cant打印二进制变量

问题描述 投票:0回答:2

我有一个声明的简单变量

h = "a"

[当我尝试获得<<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

如果h保持值为"a",那么我可以成功进行<<"a">>,为什么<<h>>出错了?

elixir
2个回答
1
投票
来自<<>>/1-types

未指定类型时,默认为整数:

iex> <<1, 2, 3>> <<1, 2, 3>>

Elixir默认情况下也接受该段为文字字符串或文字字符列表,默认情况下会扩展为整数:

iex> <<0, "foo">> <<0, 102, 111, 111>>

变量或任何其他类型需要显式标记:

iex> rest = "oo" iex> <<102, rest>> ** (ArgumentError) argument error

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

iex> rest = "oo" iex> <<102, rest::binary>> "foo"


1
投票
您可以执行,但必须指定它是二进制文件:

h = "a" <<h::binary>> "a"

© www.soinside.com 2019 - 2024. All rights reserved.