Rust 是否有更简洁的方法格式化.expect()消息?
我目前必须使用它来格式化Rust 是否有更简洁的方法格式化.expect()消息?,rust,format,Rust,Format,我目前必须使用它来格式化.expect()消息: fn main(){ 设x:Option=None; x、 expect(&format!(“世界末日:{}”,“foo”)[…]); } 有没有不那么冗长的方法?首先,您不需要编写[…] 如果您真的想恐慌,但又想格式化错误消息,我想我会使用: fn main(){ 设x:Option=None; 断言!(x.is_some(),“世界末日:{}”,“foo”); 让x=x.展开(); } 如果需要,您也可以使用板条箱: 使用展开::展开
.expect()
消息:
fn main(){
设x:Option=None;
x、 expect(&format!(“世界末日:{}”,“foo”)[…]);
}
有没有不那么冗长的方法?首先,您不需要编写
[…]
如果您真的想恐慌,但又想格式化错误消息,我想我会使用:
fn main(){
设x:Option=None;
断言!(x.is_some(),“世界末日:{}”,“foo”);
让x=x.展开();
}
如果需要,您也可以使用板条箱:
使用展开::展开;
fn main(){
设x:Option=None;
让x=unwrap!(x,“世界末日:{}”,“foo”);
}
此外,这两种方法都避免了每次都构造错误
字符串
,这与使用格式调用expect()
不同!()
为了避免在确定的情况下格式化和分配字符串
的不必要的开销,您可以将选项
转换为结果
,然后将其展开:
fn main() {
let x: Option<&str> = None;
x.ok_or_else(|| format!("the world is ending: {}", "foo"))
.unwrap();
}
fn main(){
设x:Option=None;
x、 ok_或_else(| |格式!(“世界末日:{}”,“foo”))
.unwrap();
}
我会:
option.unwrap_或_else(| | panic!(“啊:{}”,“坚果”))
格式化字符串的成本有些高。除非确实需要,否则这将避免格式化字符串。您不需要[…]
expect()
是一种“快速且肮脏”的放弃选项的方法,您不需要使用它来创建准确的错误。所以一般来说,“这不应该发生”
是enough@Stargateur关于“那不应该发生”:如果结果是错误,当我不惊慌时,我应该使用什么?选项::expect
基本上是当x是无
时。那么结果
呢?@ErdinEray我不明白你的问题-好的
返回一个结果
。对不起,我说不清楚x
是一个选项
,选项
有ok\u或_else
方法,但我似乎找不到类似的Result
方法(比如,“在出现错误时运行此闭包”)。我知道这可以通过match
实现,但我想在我提供给结果的闭包中看到一条详细的(格式化的)错误消息expect
forResult
不需要一个闭包
,它需要一个&str
@ErdinEray那么Result.map_err()
呢?或者result.ok().ok\u或_else()
如果您要立即展开结果,请不要麻烦创建结果。