我想对 Vec<T>
实现一个 .on_each()
扩展函数(该函数在 Kotlin、JavaScript 标准库中均有实现)如果您不知道该函数的功能是什么,可参考:这篇博客 中“新的数组函数”章节。下面是我的代码(已修改至编译通过):
// 首先定义一个可以返回自身的函数,参考了 Kotlin 的扩展函数 also
trait KtStd {
fn also_ref(&self, block: impl FnOnce(&Self)) -> &Self {
block(self);
self
}
}
// 任意类型都可点出该函数
impl<T> KtStd for T {}
// 然后是 on_each() 的实现
trait IterExt<T> {
fn on_each(&self, f: impl Fn(&T)) -> &Self;
}
impl<T> IterExt<T> for Vec<T> {
fn on_each(&self, f: impl Fn(&T)) -> &Self {
self.also_ref(|v| v.iter().for_each(|e| f(e)))
}
}
有人指出这 on_each()
没有组合性,也就是不能 .map().on_each().filter()
,需要先 .collect()
再 .on_each()
再 .iter()
;但我认为,既然标准库已经有了 inspect
函数,那这 on_each
函数就当作某种特殊情况(前后都不需要组合)来用吧。
1
共 3 条评论, 1 页
评论区
写评论好像oneach的意思是,可以对数组进行改变
我刚刚试了试iter_mut跟inspect很难同时使用
--
👇
laizy: 你要的是迭代器的inspect函数: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.inspect
你要的是迭代器的inspect函数: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.inspect
直接map不香吗?
执行结果