这是因为Iterator实现rev(),其中selfDoubleEndedIterator:

let vec: Vec<i32> = Vec::new();
for x in vec.iter().rev() {
    //Do stuff
}

但是,如果我将vec.iter().rev()改为&vec.rev(),它将无法编译,因为:

no method named `rev` found for type `std::vec::Vec<i32>` in the current scope

此外:

the method `rev` exists but the following trait bounds were not satisfied: `std::vec::Vec<i32> : std::iter::Iterator`, `[i32] : std::iter::Iterator`

但是for循环不是隐式地调用IntoIterator吗?&vecvec.iter()被认为是惯用的Rust 吗?

推荐答案

如果你只是在Vec上循环,那么&vec是惯用的.这是因为&Vec<T>实现了IntoIterator,这是for循环使用的.

然而,如果你想调用Iterator个方法,比如revfilter等等,你需要一个实际的Iterator(因为Vec没有实现Iterator,只有IntoIterator).

因此:

for x in &vec.rev() {
    ...
}

相当于:

for x in (&vec.rev()).into_iter() {
    ...
}

i、 e.在try 调用Iterator个方法之前,没有机会使用IntoIterator.

Rust相关问答推荐

如何找到一个数字在二维数组中的位置(S)?

文档示例需要导入相关的 struct ,但仅在运行测试时.这是故意的行为吗?

如何为 struct 字段设置新值并在Ruust中的可变方法中返回旧值

创建Rust中元对象协议的动态对象 Select /重新分配机制

在Rust中判断编译时是否无法访问

如何将单个 struct 实例与插入器一起传递到Rust中的映射

铁 rust 中双倍或更多换行符的更好练习?

通过RabbitMQ取消铁 rust 中长时间运行的人造丝任务的策略

在为第三方 struct 实现第三方特征时避免包装器的任何方法

确保参数是编译时定义的字符串文字

RUST 中的读写器锁定模式

从 rust 函数返回 &HashMap

Rust 异步循环函数阻塞了其他future 任务的执行

是否可以通过可变引用推进可变切片?

Rust/Serde/HTTP:序列化`Option`

提取 struct 生成宏中字段出现的索引

如何断言代码不会在测试中编译?

`if let` 只是另一种编写其他 `if` 语句的方式吗?

HashMap entry() 方法使borrow 的时间比预期的长

加入动态数量的期货