我有返回a Option或a的函数Result:
fn get_my_result() -> Result<(), Box<Error>> {
lots_of_things()?;
Ok(()) // Could this be omitted?
}
fn get_my_option() -> Option<&'static str> {
if some_condition {
return Some("x");
}
if another_condition {
return Some("y");
}
None // Could this be omitted as well?
}
Run Code Online (Sandbox Code Playgroud)
目前,没有Ok(())或None允许被省略,如图上面的例子.这有什么理由吗?将来有可能改变这种情况吗?
Fre*_*ios 15
你不能在Rust中省略它.一个建议是为了允许()→ Result<(), _>强制规则,但它却极大地downvoted,然后拒绝了.
评论解释了为什么这是一个坏主意:
由于JavaScript,我非常警惕隐式强制(是的,我知道这是极端的).我一直很喜欢Rust的明确性,这就是我更喜欢其他RFC的原因.
这是我害怕的一个例子
Run Code Online (Sandbox Code Playgroud)let x = { // Do some stuff ... if blah { Ok(()) } else { Err("oh no"); } }; if let Ok(_) = x { println!("this always prints"); }哎呀......在这种情况下,类型系统实际上会给出错误的信心.害怕.
此外,更一般地说,我希望该解决方案特定于退出函数或块.
当Ok(())我的代码中有很多内容时,我创建了一个小帮助函数来使代码更漂亮:
fn ok<E>() -> Result<(), E> {
Ok(())
}
Run Code Online (Sandbox Code Playgroud)