elixir - 无法打印二进制变量
问题描述
我声明了一个简单的变量
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>>
?
解决方案
来自<<>>/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"
推荐阅读
- javascript - Puppeteer:将截获的图像请求的 URL 更改为 base64 图像
- image-processing - NetVips:使用 1 个波段创建复合并应用 icc 配置文件
- javascript - 我已经建立了一个多页网站,并且必须使其成为一个双语网站,可以将所有内容从英语翻译成法语,我该怎么做?
- codemirror - codemirror 加载资源失败:net::ERR_FILE_NOT_FOUND file://themes.googleusercontent.com
- python - Python 函数无法启动:Microsoft.WindowsAzure.Storage
- c - 我还没有找到答案,为什么在 switch case 中 continue 会影响 switch 外部的循环,但 break 不会“破坏”循环?
- css - 由于媒体查询,如何解决这个 css 转换问题?
- swift - 赢得比赛时出现一个按钮
- nginx - nginx-rtmp-module -- 未知指令“dash_variant”
- gradle - Gradle Wrapper 与项目不兼容的版本