簡體   English   中英

在Rust中如何將切片與數組進行比較?

[英]How does comparison of a slice with an array work in Rust?

為什么[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]> PartialEq<&[A; 2]>未針對[B; 2] [B; 2] 因此,您無法比較[1, 1]&[1, 1] b == [1; 33] b == [1; 33]在您的示例中也不起作用,因為沒有實現長度超過32個元素的數組。

但是,人們正在努力將類型級整數引入Rust。 RFC 2000是最新建議。

目前,您可以依靠從引用到數組到引用到切片的隱式轉換。 像這樣

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM