rust 迭代器之茴香豆的n种写法
摘要关键字:rust 迭代器 TcpStream
Rust的迭代器非常的重要,对rust的编程范式影响非常大。迭代器开销小而且灵活强大,用得好能代替程序控制流,比if else大块的控制流要简洁优雅很大。对迭代器的灵活运用能考察一个人对函数式编程理解和rust基本功。
例如Tcp Server编程中的incoming连接,一般都是用迭代器逐个获取新连接后进行处理,这里对迭代器的运用就有各种不同风格写法了,类似茴香豆的n中写法。在我学习rust的过程中,总结了如下几种incoming处理方法:
1. 新手,使用match或if let模式匹配:
for tcpstream in listener.incoming() { if let Ok(stream) = tcpstream{ handle_client(stream); } }
2. 入门,善用map解包,同时处理了错误分支,有两种写法:
for tcpstream in listener.incoming() { tcpstream.map_or_else( |e| println!("accept failed = {:?}", e), |s| handle_client(s)} ) } for tcpstream in listener.incoming() { tcpstream.map_err(|e|println!("{:?}", e)) .map(|s|handle_client(s)) .unwrap_or_default(); }
3.高级进阶:
listener.incoming() .flatten() .for_each(|s|handle_client(s));
flatten()相当于flat_map(|e|e.into_iter()),能消除一层迭代。
最后这种写法是彻底的函数式编程,简洁优雅,将rust迭代器和函数式编程的强大展现的淋漓尽致。
本条目发布于2022-03-01, 共阅读 1532 次, 评论 3 条