rust - 如何使用在 rust 中返回值的多行匹配子句?
问题描述
对于一个玩具示例,假设我想为磁盘上的文件创建缓存并记录其输出。这是我希望的工作:
struct Cache {
data: HashMap<String, String>
}
impl Cache {
fn load(&mut self, filename: &str) -> String {
let result = match self.data.get(filename) {
Some(s) => s.clone(),
None => {
let s = fs::read_to_string(filename).expect("couldn't read");
self.data.insert(String::from(filename), s.clone());
return s;
}
};
println!("my result: {}", result);
return result;
}
}
但是该None => {...}
子句不像它自己的函数那样执行,所以它return
退出了整个load
函数。我尝试了几种不同的方法,但无法让多行匹配子句返回值。有没有办法让这种类型的match
工作生锈?
rust 版本:1.50.0 语言版本:2018
解决方案
返回块中的最后一条语句,适用于任何块,即,如果您将s
其作为匹配臂的最后一行None
,它将从该块返回。
您只需要return
在从函数或闭包返回时使用。