【问题标题】:Returning Result<(), Box<dyn Error>> in rust返回 Result<(), Box<dyn Error>> in rust
【发布时间】:2021-06-25 01:41:31
【问题描述】:

我在 golang 中有一个函数 -


func (s *Server) getEnforcer(handle int) (*casbin.Enforcer, error) {
    if _, ok := s.enforcerMap[handle]; ok {
        return s.enforcerMap[handle], nil
    } else {
        return nil, errors.New("enforcer not found")
    }
}

我正在尝试在 rust 中实现这一点。我写了这个-

impl Server {
    fn getEnforcer(&mut self, handle: i32) -> Result<Enforcer, Box<dyn Error>> {
        let e: Enforcer = self.enforcerMap[&handle];
        // match ..
    }
}

不知道如何处理错误。

【问题讨论】:

  • 什么是enforcerMap
  • 假设enforcerMapBTreeMapHashMap,你会这样做:self.enforcerMap.get (handle).ok_or (Box::new (Error::new ("enforcer not found")))

标签: error-handling rust


【解决方案1】:

更好的是,返回一个选项,因为唯一可能的错误是地图中不存在索引,

所以..

impl Server {
    pub fn getEnforcer(&self,handle:i32)->Option<&Enforcer> {
        self.enforcerMap.get(&handle)
    }
    pub fn getEnforcerMut(&mut self,handle:i32)->Option<&mut Enforcer> {
        self.enforcerMap.get_mut(&handle)
    }
}

不过我强烈建议this linkthis link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2020-03-26
    • 2020-10-08
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多