跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Rust

Rust 从入门到实战:读取命令行参数

Rust 标准库提供 std::env::args 函数用于获取命令行参数,返回迭代器。通过 collect 方法可转为 Vec 集合方便处理。需注意该函数在遇到无效 Unicode 字符时会 panic,此时应改用 args_os 返回 OsString。示例展示了如何收集并打印参数,其中第一个元素为程序自身名称。

SqlMaster发布于 2024/3/5更新于 2026/9/1057 浏览
Rust 从入门到实战:读取命令行参数

为了确保 minigrep 能够获取传递给它的命令行参数的值,我们需要一个 Rust 标准库提供的函数,也就是 std::env::args。这个函数返回一个传递给程序的命令行参数的迭代器(iterator)。我们会在第十三章全面介绍它们,但现在只需理解迭代器的两个细节:迭代器生成一系列的值,可以在迭代器上调用 collect 方法将其转换为一个集合,比如包含所有迭代器产生元素的 vector。

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    println!("{:?}", args);
}

首先使用 use 语句将 std::env 模块引入作用域以便使用它的 args 函数。注意 std::env::args 函数被嵌套进了两层模块中。正如第七章讲到的,当所需函数嵌套了多于一层模块时,通常将父模块引入作用域,而不是其自身。这便于我们利用 std::env 中的其他函数。这比增加了 use std::env::args; 后仅仅使用 args 调用函数要更明确一些,因为 args 容易被错认成一个定义于当前模块的函数。

args 函数和无效的 Unicode 字符

注意 std::env::args 在其任何参数包含无效 Unicode 字符时会 panic。如果你需要接受包含无效 Unicode 字符的参数,使用 std::env::args_os 代替。这个函数返回 OsString 值而不是 String 值。这里出于简单考虑使用了 std::env::args,因为 OsString 值每个平台都不一样而且比 String 值处理起来更为复杂。

在 main 函数的第一行,我们调用了 env::args,并立即使用 collect 来创建了一个包含迭代器所有值的 vector。collect 可以被用来创建很多类型的集合,所以这里显式注明 args 的类型来指定我们需要一个字符串 vector。虽然在 Rust 中我们很少会需要注明类型,然而 collect 是一个经常需要注明类型的函数,因为 Rust 不能推断出你想要什么类型的集合。

最后,我们使用调试格式 :? 打印出 vector。让我们尝试分别用两种方式(不包含参数和包含参数)运行代码:

$ cargo run
Compiling minigrep v0.1.0 (file:///projects/minigrep)
Finished dev [unoptimized + debuginfo] target(s) in 0.61s
Running `target/debug/minigrep`
["target/debug/minigrep"]

$ cargo run needle haystack
Compiling minigrep v0.1.0 (file:///projects/minigrep)
Finished dev [unoptimized + debuginfo] target(s) in 1.57s
Running `target/debug/minigrep needle haystack`
["target/debug/minigrep", "needle", "haystack"]

注意 vector 的第一个值是 target/debug/minigrep,它是我们二进制文件的名称。这与 C 中的参数列表的行为相匹配,让程序使用在执行时调用它们的名称。如果要在消息中打印它或者根据用于调用程序的命令行别名更改程序的行为,通常可以方便地访问程序名称,不过考虑到本章的目的,我们将忽略它并只保存所需的两个参数。

更多推荐文章

查看全部
  • Java 算法:二分查找核心原理与经典例题
  • 大模型训练数据争议与同质化现实
  • Stable Diffusion 显存优化方案:解决内存不足错误
  • Sim2Real Gap 详解:机器人从仿真到现实的关键技术路径
  • AI 编程工具深度评测:Lynx、Copilot、Cursor 等五款对比分析
  • 医疗 AI 场景下算法编程深度解析(一)
  • Vue3 环境下 vue-simple-uploader 进度条异常修复与源码适配
  • SpringBoot 配置文件核心用法:Properties 与 YAML
  • GitHub 汉化插件安装指南:三步实现界面中文化
  • C++ 关联容器:set、map 和键值对实战笔记
  • Phi-4-mini-reasoning Chainlit 性能优化:前端懒加载与缓存策略
  • 二分查找实战:旋转排序数组最小值与缺失数字
  • 技术实力的本质:从解决问题到持续学习
  • PyCharm 破解安全风险与开源 GLM 模型替代方案
  • 本地 Git 服务器部署指南:从零搭建私有代码仓库
  • Pico 4XVR 1.10.13 版本下载安装指南
  • SVN Web 管理工具 svnWebUI 部署与权限配置实战
  • 大语言模型在审计工作中的应用场景
  • React 集成 Microi 吾码低代码平台开发指南
  • C++ 开发者进阶书单与核心知识体系梳理

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online