gpt4 book ai didi

rust - Rust 中 ".map(|&x| x)"的目的是什么

转载 作者:行者123 更新时间:2023-12-05 01:04:23 25 4
gpt4 key购买 nike

我正在学习 Rust,并在许多地方注意到以下迭代器模式:

let some_vector: &[& str] = &["hello", "world", "zombies", "pants"];
let result: Vec<&str> = some_vector
.iter()
.filter(|&x| *x == "hello")
.map(|&x| x)
.collect();

那个.map(|&x| x)的目的是什么?为什么有必要?它会创建副本吗?

当我删除它时,我得到以下编译器错误:

error[E0277]: a value of type `Vec<&str>` cannot be built from an iterator over elements of type `&&str`
--> src/main.rs:7:6
|
7 | .collect();
| ^^^^^^^ value of type `Vec<&str>` cannot be built from `std::iter::Iterator<Item=&&str>`
|
= help: the trait `FromIterator<&&str>` is not implemented for `Vec<&str>`
note: required by a bound in `collect`

For more information about this error, try `rustc --explain E0277`.

所以 map 将一个迭代器对字符串切片的引用转换为一个迭代器对字符串切片?删除一级间接?对吗?

最佳答案

除了@AlexW 的回答,实际上没有必要写,因为有一个内置的迭代器适配器可以做得更好(更清晰,更高效):copied() .

let some_vector: &[&str] = &["hello", "world", "zombies", "pants"];
let result: Vec<&str> = some_vector
.iter()
.filter(|&x| *x == "hello")
.copied()
.collect();

还有cloned()等于 .map(|x| x.clone()).

关于rust - Rust 中 ".map(|&x| x)"的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72103039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com