首页 > 解决方案 > 相同的 elixir 二进制模式匹配在命令行上有不同的表示

问题描述

我是 Elixir 的新手,对下面 line15 和 line17 的两个不同输出感到困惑,即一个是98,另一个是"b"(来自官方文档)。

这两个匹配只是做同样的事情,因为(IMO)<<head, rest::binary>>与 相同<<head::binary-size(1), rest::binary>>。为什么它们在输出上有所不同?(我知道它们在内部是一样的)

我正在使用 Windows 操作系统顺便说一句。

iex(14)> <<head, rest::binary>> = "banana"
"banana"
iex(15)> head
98
iex(16)> <<head::binary-size(1), rest::binary>> = "banana"
"banana"
iex(17)> head
"b"

标签: binarypattern-matchingelixir

解决方案


位串中元素的默认类型是integer,但是当您明确指定它为模式匹配时binary,它变为binary

iex|1> <<head::integer, rest::binary>> = "banana"
iex|2> head
#⇒ 98
iex|3> <<head>>
#⇒ &quot;b"

推荐阅读