Vector 尝试使用高阶函数用对象填充锈蚀向量
我可以创建一个Rust向量,并使用循环用struct实例填充它,但我想知道是否可以使用像Vector 尝试使用高阶函数用对象填充锈蚀向量,vector,iterator,rust,Vector,Iterator,Rust,我可以创建一个Rust向量,并使用循环用struct实例填充它,但我想知道是否可以使用像map之类的高阶函数得到相同的结果 以下是一些有效的代码: #[derive(Debug)] pub struct sim { id: i32, } impl Default for sim { fn default() -> sim { sim { id: 4 } } } fn main() { let mut v2 = Vec::<sim&g
map
之类的高阶函数得到相同的结果
以下是一些有效的代码:
#[derive(Debug)]
pub struct sim {
id: i32,
}
impl Default for sim {
fn default() -> sim {
sim { id: 4 }
}
}
fn main() {
let mut v2 = Vec::<sim>::new();
for i in 0..7 {
v2.push(sim::default())
}
println!("{:?}", v2);
}
#[派生(调试)]
发布结构模拟{
id:i32,
}
sim卡的impl默认值{
fn default()->sim{
sim{id:4}
}
}
fn main(){
让mut v2=Vec:::new();
因为我在0..7{
v2.推送(sim::default())
}
println!(“{:?}”,v2);
}
我尝试了下面的代码,但没有成功
let mut v3 = Vec::<sim>::new();
(0..7).map(|| v3.push(sim::default()));
let mut v3=Vec:::new();
(0..7).map(| | v3.push(sim::default());
你眼前的问题是:map
根本不是这样工作的。映射涉及获取一个序列,并转换所述序列中的每个元素,生成一个新序列。出于两个原因,您不应该仅使用它来执行副作用:
foreach
方法,它可以做到这一点,同时还可以传达正在发生的事情
至于如何使用高阶函数实际构造集合
#[derive(Clone, Debug)]
pub struct Sim {
id: i32,
}
impl Default for Sim {
fn default() -> Sim {
Sim { id: 4 }
}
}
fn main() {
use std::iter;
let v1 = vec![Sim::default(); 7];
let v2: Vec<_> = iter::repeat(Sim::default()).take(7).collect();
let v3: Vec<_> = (0..7).map(|_| Sim::default()).collect();
let v4: Vec<_> = iter::once(Sim::default()).cycle().take(7).collect();
}
#[派生(克隆、调试)]
发布结构模拟{
id:i32,
}
Sim卡的impl默认值{
fn default()->Sim{
Sim{id:4}
}
}
fn main(){
使用std::iter;
设v1=vec![Sim::default();7];
让v2:Vec=iter::repeat(Sim::default()).take(7.collect();
让v3:Vec=(0..7).map(| | Sim::default()).collect();
让v4:Vec=iter::once(Sim::default()).cycle().take(7.collect();
}
可能还有更多。请注意,
v1
、v2
和v4
要求项目类型为Clone
,以便可以进行复制。请注意,惯用的生锈样式是对类型使用PascalCase
sim
不正确,sim
将不正确。您也不需要在v2
上提供类型提示-推送sim
就足以推断类型。哈哈@Shepmaster谢谢。总有一天我会在这里把我的最简单的例子弄清楚;)这就是他们的目的-哦,我知道你在那里做了什么。很酷,这很有帮助。是的,我可以写一个循环,这是我第一次做的。我只是想了解rust中的高阶函数,并对它们更熟悉。谢谢你的想法,因为我自己也不会想到这些。