我试图用动态边界切片数组:
fn main() {
let n: i32 = 2;
let a = [1, 2, 3];
println!("{:?}", &a[0..n]);
}
它给了我以下错误:
错误:不满足特征限制
[_]: std::ops::Index<std::ops::Range<i32>>
我不知道如何处理此错误。我似乎无法使用i32
切片数组?
答案 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。