【开发总结】Rust的命令行库clap

2024-04-01 08:12

本文主要是介绍【开发总结】Rust的命令行库clap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

偶然了解到Rust中有命令行处理的相关库clap,可以很方便的解决程序员需要编写命令行程序时的命令行输入参数问题。
在CSDN中找到了一篇文章进行学习,将一些感想记录如下:
首先该文章的运行环境是cargo,首先需要通过

cargo new "项目名"

指令创建一个新的项目。
作者在第一段给出了一个官方文档中的例子,却并没有介绍程序功能和如何运行,查阅GPT后发现这段程序可以根据用户输入的名字和次数输出相应的打招呼内容。
运行指令为

cargo run -- -n test -c 5

同时还支持完全的命令方式调用(这也是clap的默认提示,如果用户输入错误的话会以此形式提示)

cargo run -- --name test --count 5

程序将会输出5次Hello test!

关注到上述例子中有一个为default_value_t的形参,通过测试发现,如果是系统默认的OsStr类型,也即字符串,可以通过default_value指定,否则会报错:

error[E0308]: mismatched types--> src/main.rs:8:42|
8 |     #[arg(short, long, default_value_t = "World")] // 设置 name 字段的默认值     ...|                                          ^^^^^^^- help: try using a conversion method: `.to_string()`|                                          ||                                          expected `String`, found `&str`
9 |     name: String,|           ------ expected due to this

需要把str转成String,但是在形参部分却不支持.to_string()转换方法,又无法在结构体内部定义变量,查阅GPT发现,可以使用default_value类型直接处理此种情况,因为此时需要传入的是字符串(下一部分将会看到为什么只有字符串才能如此处理)
如果将default_value_t = 1改为default_value = 1,将会报错如下:

error[E0277]: the trait bound `clap::builder::OsStr: From<{integer}>` is not satisfied--> src/main.rs:12:40|
12   |     #[arg(short, long, default_value = 1)]|                        -------------   ^ the trait `From<{integer}>` is not implemented for `clap::builder::OsStr`|                        ||                        required by a bound introduced by this call|= help: the following other types implement trait `From<T>`:<clap::builder::OsStr as From<Str>><clap::builder::OsStr as From<&clap::builder::OsStr>><clap::builder::OsStr as From<&Str>><clap::builder::OsStr as From<&&'static std::ffi::OsStr>><clap::builder::OsStr as From<&&'static str>><clap::builder::OsStr as From<&'static std::ffi::OsStr>><clap::builder::OsStr as From<&'static str>>= note: required for `{integer}` to implement `Into<clap::builder::OsStr>`= note: required for `{integer}` to implement `IntoResettable<clap::builder::OsStr>`

可以看到,default_value默认支持的是OsStr类型的,也即字符串,因此需要将其改为default_value = "1"才能通过编译。

最后一段例子3 自定义验证逻辑中有两个->接中文注释的部分,此部分为注释,应该以//开头。

最后一个例子是没有指令flag的short 和long name的,所以只能直接输入参数,无法通过–port 8080的方式调用。

这篇关于【开发总结】Rust的命令行库clap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866659

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Rust 智能指针的使用详解

《Rust智能指针的使用详解》Rust智能指针是内存管理核心工具,本文就来详细的介绍一下Rust智能指针(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理与使用场景,... 目录一、www.chinasem.cnRust 智能指针详解1、Box<T>:堆内存分配2、Rc<T>:

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二