AsRef[i32]我编写了一个函数,它采用带有bound的通用参数T。现在我想使用方法在函数内部进一步对输入进行切片get。但 Rust 编译器不允许我使用1..范围来切片。我可以使用split_at方法来分割切片。那可行。但我的问题是为什么我不能array.as_ref().get([1..])在这种情况下使用?我是否需要向泛型类型添加任何其他特征边界才能使其工作?如果我使用这样get的一个索引array.as_ref().get(0)就可以了。
这是我的代码 -
fn find<T>(array: T, key: i32) -> Option<usize>
where
T: AsRef<[i32]>,
{
let arr = array.as_ref().get([1..]);
println!("slicing successful");
None
}
fn main() {
let arr = [1, 2, 3];
find(arr, 1);
}
Run Code Online (Sandbox Code Playgroud)
您混淆了两种语法。第一个是最常用于索引切片的:
let arr = array.as_ref()[1..];
Run Code Online (Sandbox Code Playgroud)
这只是语法糖
let arr = array.as_ref().index(1..);
Run Code Online (Sandbox Code Playgroud)
请注意,要使第二个版本起作用,您需要std::ops::Index在范围内具有该特征。
这不会按原样工作,因为它返回一个切片[i32], 和[i32]: !Sized。因此,您需要添加一个间接级别:
let arr = &array.as_ref()[1..];
Run Code Online (Sandbox Code Playgroud)
看看操场。
第二种可能的方法是使用get切片方法:
let arr = array.as_ref().get(1..);
Run Code Online (Sandbox Code Playgroud)
看看操场。
| 归档时间: |
|
| 查看次数: |
543 次 |
| 最近记录: |