Rust中比较Vector与Array类型为何不会报错?
Rust中Vector与Array跨类型相等比较的原理
Rust的==运算符是PartialEq trait的语法糖,本身没有强制要求两边操作数必须是完全相同的类型:只要标准库或用户为类型A实现了PartialEq<类型B>,两个类型的值就可以直接用==做相等判断。
你遇到的Vec和Array可直接比较的行为,是Rust标准库的特意设计:
- 标准库为所有长度的固定长度数组
[T; N]和动态长度向量Vec<T>双向实现了PartialEq,既支持vec == arr,也支持arr == vec - 比较逻辑会先将两者统一转为不可变切片
&[T],先校验长度是否一致,再逐位比较对应位置的元素值,全部匹配则返回true - 这套跨类型比较实现对元素的要求和同类型比较一致:只要容器内的元素
T本身实现了PartialEq,比较就可以正常编译运行
你给出的示例代码可以正常编译运行,输出结果为true:
// Rust Programming Language fn main() { let vec = vec!["a", "b", "c"]; // Vector类型 let arr = ["a", "b", "c"]; // 固定长度Array类型 println!("{}", vec == arr); // true! }
除了Vec和Array的组合,标准库还为切片&[T]、Vec、Array三者两两之间都实现了相同逻辑的跨类型PartialEq,日常写代码时不需要手动做类型转换就可以直接比较序列内容是否一致。
内容的提问来源于stack exchange,提问作者Larynx
相关产品推荐
相关产品推荐

