You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir两种二进制模式匹配为何输出98与"b"不同?

关于Elixir二进制匹配输出差异的解答

嘿,这个细节确实容易让刚接触Elixir的朋友困惑,我来给你理清楚这两种写法的核心区别~

首先,虽然这两种模式匹配都能正确把"banana"拆成第一个元素和剩余部分,但它们对head变量的类型解析规则完全不同:

  • 对于<<head, rest::binary>>的写法:
    当你在二进制匹配里不给变量指定类型约束时,Elixir默认会把单个字节解析成对应的ASCII整数。"b"对应的ASCII码值就是98,所以这里的head会被绑定为整数98。

  • 对于<<head::binary-size(1), rest::binary>>的写法:
    这里你明确给head指定了类型约束binary-size(1),意思是要匹配长度为1的二进制串。而Elixir里的字符串本身就是UTF-8编码的二进制,所以这个约束会直接把第一个字节解析成对应的字符"b",head也就被绑定为字符串类型的"b"。

你提到的“内部等价”其实是指两种匹配的拆分逻辑一致,都能正确分离出第一个字符的字节和剩余内容,但变量的类型是由你在模式里的标注决定的。如果想在两种类型之间转换也很简单:

  • 把整数98转成字符串:<<98>> 就能得到"b"
  • 把字符串"b"转成整数:<<c::utf8>> = "b",此时c就是98

内容的提问来源于stack exchange,提问作者John Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:32:26