《Rust权威指南》 第12章 I/O项目:编写一个命令行程序

本节实现一个经典的命令行工具:grep (globally search a regular expression and print)
该工具接受一个文件名和一个字符串作为参数,然后在执行时读取文件,输出包含字符串的所有行
实现的方法很简单:读取文件名和待搜查字符串。读取文件并储存于字符串,遍历每行并检查每行是否含有搜索字符串
完整代码和中文注释放在
nanogrep

有几个学习点:

接受命令行参数

std::env::args返回一个命令行参数的迭代器,可以配合collect构造一个容器出来

let args:Vec<String> = env::args().collect();

注意,第一个值一定是二进制文件的名字,这一点和C是一样的

模块化

  • 将程序拆为main.rs和lib.rs,将实际的业务逻辑放在lib.rs里
  • main.rs主要是
    • 调用lib.rs中的run函数
    • 处理run函数可能存在的错误

错误处理逻辑

不要使用panic,而是将函数的返回值设为Result<T,E>,并将错误不断的向上传递,最终在main函数中一并处理

测试驱动开发

  1. 想好需要的功能,编写一个现阶段会失败的测试,确保会如期运行失败
  2. 编写程序,让测试通过
  3. 保证测试通过的前提下重构代码
  4. 继续下一轮开发,返回步骤1

标准错误流

应当使用eprintln!宏等将错误提示打印到标准错误流
这使得我们将标准输出流和标准错误流分开
可以将标准输出重定向,并保证我们仍能在控制台看到报错信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值