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 条
属于标签: rust
#1楼 匿名访客 2022-03-26 21:04:11
学习了
#2楼 Lesley 2023-06-09 18:46:06
Большое спасибо ! Завертывайте и еще на наш сайт :) Балкон поставить цена
#3楼 Tayla 2024-08-11 19:41:26
Премногое спасибо ! Заглядываете и еще на наш сервис ;) Варианты французский балкон
3 条评论,说点什么吧