如何使用i32限制对数组进行切片?

时间:2016-07-20 14:32:05

标签: rust

我试图用动态边界切片数组:

fn main() {
    let n: i32 = 2;
    let a = [1, 2, 3];
    println!("{:?}", &a[0..n]);
}

它给了我以下错误:

  

错误:不满足特征限制[_]: std::ops::Index<std::ops::Range<i32>>

我不知道如何处理此错误。我似乎无法使用i32切片数组?

1 个答案:

答案 0 :(得分:7)

您可以检查slice docs(搜索Index<Range)仅Index范围内usize个特征,因此您无法使用Range<i32>

一种可能性是为i32投射usize

fn main() {
    let n: i32 = 2;
    let a = [1,2,3];
    println!("{:?}", &a[0..n as usize]); 
}

但是你应该注意,因为没有选中强制转换,可以将i32的负usize值转换为tell application "System Events" set the clipboard to "^" keystroke "v" using command down keystroke "a" set the clipboard to "~" keystroke "v" using command down keystroke "a" end tell 而不会出错。您可以创建一个函数来执行检查转换或使用包(例如num::ToPrimitive)。

将来,Rust将在标准库中拥有checked conversion