如何允许为 Args 值调用“last”?
How is `last` allowed to be called for an Args value?
这是一个小的 Rust 脚本(是的,我知道不鼓励使用 unwrap
,但它适用于这个简短的示例):
fn main() {
let args = std::env::args();
let word = args.last().unwrap();
println!("Last argument is {}", word);
}
我从 Rust 文档中看到
std
是一个板条箱
env
是 crate std
中的一个模块
args
是模块中的函数
- 函数returns一个类型
Args
的值,一个结构
- 结构
Args
实现了特征Iterator
and ExactSizeIterator
但是,据我从文档中得知,Args
、Iterator
和 ExactSizeIterator
都没有定义名为 last
的方法! Args
本身不定义任何内容,Iterator
仅定义 next
和 size_hint
,而 ExactSizeIterator
定义 len
.
为什么这个脚本有效?如何允许 last
被调用以获得 Args
值?是缺少文档还是我遗漏了什么?
last
方法来自 IteratorExt
特征,它通过 impl<I> IteratorExt for I where I: Iterator
一揽子实现为所有迭代器定义方法。
这些方法在范围内,因为特征 IteratorExt
是在 prelude
.
中导入的
有时您需要在文档中进行双向操作。搜索 last
将带您到 IteratorExt::last
:
fn last(self) -> Option<<Self as Iterator>::Item>
IteratorExt
定义为:
pub trait IteratorExt where Self: Iterator {
// ...
}
这是一个 扩展特征 - 一个全部应用于另一个特征的方法集合。这样做是为了帮助保护 对象安全 ,因为其中一些方法需要使用参数,这意味着参数必须具有已知大小。该特征有一个 全面实施 来应用它:
impl<I> IteratorExt for I where I: Iterator
但是,有一些 work recently 可以减少扩展特征的数量,因为人们意识到您可以简单地向某些方法添加 Sized
的界限。有可能其中一些可能适用于 IteratorExt
,他们将移回 Iterator
正确。
这是一个小的 Rust 脚本(是的,我知道不鼓励使用 unwrap
,但它适用于这个简短的示例):
fn main() {
let args = std::env::args();
let word = args.last().unwrap();
println!("Last argument is {}", word);
}
我从 Rust 文档中看到
std
是一个板条箱env
是 cratestd
中的一个模块
args
是模块中的函数- 函数returns一个类型
Args
的值,一个结构 - 结构
Args
实现了特征Iterator
andExactSizeIterator
但是,据我从文档中得知,Args
、Iterator
和 ExactSizeIterator
都没有定义名为 last
的方法! Args
本身不定义任何内容,Iterator
仅定义 next
和 size_hint
,而 ExactSizeIterator
定义 len
.
为什么这个脚本有效?如何允许 last
被调用以获得 Args
值?是缺少文档还是我遗漏了什么?
last
方法来自 IteratorExt
特征,它通过 impl<I> IteratorExt for I where I: Iterator
一揽子实现为所有迭代器定义方法。
这些方法在范围内,因为特征 IteratorExt
是在 prelude
.
有时您需要在文档中进行双向操作。搜索 last
将带您到 IteratorExt::last
:
fn last(self) -> Option<<Self as Iterator>::Item>
IteratorExt
定义为:
pub trait IteratorExt where Self: Iterator {
// ...
}
这是一个 扩展特征 - 一个全部应用于另一个特征的方法集合。这样做是为了帮助保护 对象安全 ,因为其中一些方法需要使用参数,这意味着参数必须具有已知大小。该特征有一个 全面实施 来应用它:
impl<I> IteratorExt for I where I: Iterator
但是,有一些 work recently 可以减少扩展特征的数量,因为人们意识到您可以简单地向某些方法添加 Sized
的界限。有可能其中一些可能适用于 IteratorExt
,他们将移回 Iterator
正确。