首页 > 解决方案 > 如何使用在 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

标签: rust

解决方案


返回块中的最后一条语句,适用于任何块,即,如果您将s其作为匹配臂的最后一行None,它将从该块返回。

您只需要return在从函数或闭包返回时使用。


推荐阅读