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
for
Result
不需要一个
闭包
,它需要一个
&str
@ErdinEray那么
Result.map_err()
呢?或者
result.ok().ok\u或_else()
如果您要立即
展开
结果,请不要麻烦创建
结果。