对于一个玩具示例,假设我想为磁盘上的文件创建缓存并记录其输出。这是我希望能发挥作用的:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但该None => {...}子句不像它自己的函数那样执行,因此它return退出整个load函数。我尝试了几种不同的方法,但无法让多行匹配子句返回值。有什么方法可以让这种类型的matchRust 工作吗?
Rust 版本:1.50.0 语言版本:2018
返回块中的最后一条语句,该语句适用于任何块,即,如果您将其s作为匹配臂中的最后一行None,则将从该块返回该语句。
所以你应该把那只手臂改为
None => {
let s = fs::read_to_string(filename).expect("couldn't read");
self.data.insert(String::from(filename), s.clone());
s
}
Run Code Online (Sandbox Code Playgroud)
注:没有也return没有;。
return仅当从函数或闭包返回时才需要使用。
| 归档时间: |
|
| 查看次数: |
4644 次 |
| 最近记录: |