有可能返回一些东西或什么都没有?

时间:2016-08-31 23:28:41

标签: rust

在Rust中是否可以根据其中定义的条件使函数返回一个对象或什么都不返回?

例如:

fn login(self, username: Username, password: Password) -> Calculator_1 {
        let ch = match self.ch.send(username.to_string()).send(password.to_string()).offer() {
            Left(ch) => ch,
            Right(ch) => { ch.close(); return }
        };
        Calculator_1::new(ch)
    }

我正在使用Rust中的会话类型库,所以我希望只有在验证了用户名和密码后才能返回该对象,这应该转到Left分支。如果未经验证,则应转至Right部门并关闭该程序。我不能真正让它在返回或不返回某些东西方面起作用。

1 个答案:

答案 0 :(得分:6)

使用Option<T>Option<T>可以保留Some(T)(某些值为T,其中T是通用类型参数)或None(无值)。

fn login(self, username: Username, password: Password) -> Option<Calculator_1> {
    match self.ch.send(username.to_string()).send(password.to_string()).offer() {
        Left(ch) => Some(Calculator_1::new(ch)),
        Right(ch) => { ch.close(); None }
    }        
}

有关更多信息,请阅读 The Rust Programming Language 中的Error Handling章节。