Rust引用转换时避免使用变量
创始人
2024-02-04 03:45:15
0

本文较短,留待日后参考。

检测文件存在引发的问题

笔者在使用Rust编写某特定功能时,需要通过命令行转入的参数检测某文件是否存在;为方便说明问题,笔者编写的代码精简如下:

use std::path::Path;fn main() {let args = std::env::args_os().skip(1);for file in args {let filepath: &Path = file.as_ref();let exist = filepath.exists();let filestr = file.as_os_str().to_string_lossy();println!("File '{}' exists: {}", filestr, exist);// if exist {//    process_file(&filestr);// }}
}

编译后执行的结果如下:

$ cargo run --release /usr/bin/bash /usr/bin/zshFinished release [optimized] target(s) in 0.01sRunning `target/release/file-check /usr/bin/bash /usr/bin/zsh`
File '/usr/bin/bash' exists: true
File '/usr/bin/zsh' exists: false

笔者的诸求比较简单,因filepath引用变量的类型为&Path,且仅使用到一次(调用了其exists方法),笔者希望代码更为简洁,省去这一转换的引用变量;换句话说,删除仅用一次的filepath引用变量。

引用转换时指定转换类型

以上代码中,for循环遍历迭代变量args得到的file类型为OsString,该类型有两种引用转换:

impl AsRef for OsString
fn as_ref(&self) -> &OsStrimpl AsRef for OsString
fn as_ref(&self) -> &Path

这两种转换分别可以得到&OsStr&Path两种类型的引用。为了避免引入仅用一次的filepath,笔者修改后的代码如下:

use std::path::Path;fn main() {let args = std::env::args_os().skip(1);for file in args {let exist = AsRef::::as_ref(&file).exists();let filestr = file.as_os_str().to_string_lossy();println!("File '{}' exists: {}", filestr, exist);// if exist {//    process_file(&filestr);// }}
}

代码用,笔者用到了显示指定引用转变类型的方法得到了一个&Path的引用:

AsRef::::as_ref(&file)

随后立即调用其exists()方法,从而直接得到文件是否存在的布尔值,省略了filepath引用变量。尽管这是一个小的改进,但积累起来可以让开发者编写更加简洁高效的代码;此外,这一改进亦可见Rust语法的灵活性。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...