Rust中单引号与双引号的区别及字节字面量编译报错问题解析
Rust 字节前缀引号的使用差异说明
核心类型差异
你遇到的编译错误本质是两种带b前缀的引号语法生成的类型不匹配:
b'#'(单引号包裹)是字节字符字面量,代表单个ASCII字符对应的字节值,类型为u8,和你代码中vec[j_pointer].as_bytes()[i_index]取到的单个字节类型完全匹配,所以可以直接比较,编译正常。b"#"(双引号包裹)是字节字符串字面量,代表固定长度的字节数组的不可变引用,此处的类型为&[u8; 1],和u8类型不属于同一类型,因此编译器会抛出expected u8, found &[u8; 1]的类型错误。
补充常规引号规则
无b前缀的普通引号规则和上述逻辑一致:
- 单引号
'包裹的是字符字面量,类型为char,代表单个Unicode标量值,内存占4字节 - 双引号
"包裹的是字符串字面量,类型为&str,是UTF-8编码的字符串切片引用
可选兼容写法
如果你坚持要使用b"#"写法,只需要取字节数组的第一个元素即可完成匹配,修改判断逻辑为:
if character == tree[0] { tree_counter += 1 }
不过从语义合理性来说,直接使用字节字符字面量b'#'是更符合场景的写法。
内容的提问来源于stack exchange,提问作者Mlengcivil
相关产品推荐
相关产品推荐

