gpt4 book ai didi

arrays - 切片与数组的比较在 Rust 中如何工作?

转载 作者:行者123 更新时间:2023-11-29 08:11:28 25 4
gpt4 key购买 nike

为什么 [1,1] == &[1,1] 甚至不能编译(可能是因为它们的类型不同),但下面的代码片段编译并运行良好。

let a: [i32; 100] = [1; 100];
let b: &[i32] = &a[1..3];
if b == [1, 1] { // comparison with &[1, 1] works as well
println!("it works"); // this does get printed
}

最佳答案

现在,Rust 中的数组有些特殊,因为 Rust 缺少类型级别的整数。你不能写函数 fn f<T, N>(array: &[T; N]) .同样,您不能实现 N 上的通用特征。 .

标准库为从 0 到 32 的数组长度提供了一些特征实现来缓解这个问题,这就是为什么 b == [1,1]作品。有一个特征 PartialEq 的实现对于这种情况:

impl<'a, 'b, A, B> PartialEq<[A; 2]> for &'b [B] 
where B: PartialEq<A>

但是,特征 PartialEq<&[A; 2]>未针对 [B; 2] 实现.因此你无法比较 [1, 1]&[1, 1] . b == [1; 33]在您的示例中也不会起作用,因为没有实现超过 32 个元素的数组。

但是将类型级别的整数引入 Rust 的工作正在进行中。 RFC 2000是最新的提议。

目前您可以依赖从对数组的引用到对切片的引用的隐式转换。像这样

fn f<T>(slice: &[T]) {}

f(&[1, 2, 3, 4]);

关于arrays - 切片与数组的比较在 Rust 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44351328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com