您的位置:首页 > 科技 > 能源 > seo优化课程_上海十大装修公司品牌排行榜_河南网站建设报价_国内seo公司哪家最好

seo优化课程_上海十大装修公司品牌排行榜_河南网站建设报价_国内seo公司哪家最好

2024/11/20 9:20:06 来源:https://blog.csdn.net/m0_37719524/article/details/143612307  浏览:    关键词:seo优化课程_上海十大装修公司品牌排行榜_河南网站建设报价_国内seo公司哪家最好
seo优化课程_上海十大装修公司品牌排行榜_河南网站建设报价_国内seo公司哪家最好

Rust设计模式之Fold


Fold (折叠)
如Rust Collection中的fold方法,是消耗迭代器适配器,将闭包应用于每一个元素,并将结果返回一样。Fold模式的中心思想也是如此,将元素折叠处理,最终计算出新的元素。


代码示例:
iterator fold:

fn main() {let even_sum = (1..=10).fold(0, |acc, num| if num % 2 == 0 { acc + num } else { acc });println!("{even_sum:?}");
}

而我们自己实现的Fold模式,一般用于映射数据结构,不同于面向对象的原地修改,由于Rust的引用和借用以及不可变性,生成新的结构从而替代老的结构调理更为清晰。
代码示例:

mod ast {pub enum Stmt {Node(Box<Node>),Let(Box<Info>, Box<Node>),}pub struct Info {value: String,}pub enum Node {IntLit(i64),}
}
mod fold {use crate::ast::{self, Info, Node, Stmt};pub trait Folder {// A leaf node just returns the node itself. In some cases, we can do this// to inner nodes too.fn fold_Info(&mut self, n: Box<Info>) -> Box<Info> {n}// Create a new inner node by folding its children.fn fold_stmt(&mut self, s: Box<Stmt>) -> Box<Stmt> {match *s {Stmt::Node(e) => Box::new(Stmt::Node(self.fold_Node(e))),Stmt::Let(n, e) => Box::new(Stmt::Let(self.fold_Info(n), self.fold_Node(e))),}}fn fold_Node(&mut self, e: Box<Node>) -> Box<Node> {e}}
}

总结:通常来说只有我们在自己编写一些数据结构的时候方才用得到这种fold模式,一般的业务逻辑相对的较少能够涉及到此,不过多懂一些也是极好的~

“万全之计便是即刻行动”

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com