我现在必须使用这个来格式化.expect()消息:
.expect()
fn main() { let x: Option<&str> = None; x.expect(&format!("the world is ending: {}", "foo")[..]); }
字符串有没有不那么冗长的方法?
3gtaxfhh1#
我会做:
option.unwrap_or_else(|| panic!("ah: {}", "nuts"))
字符串这是针对Option的,对于Result,你需要忽略参数:
Option
Result
result.unwrap_or_else(|_| panic!("ah: {}", "nuts"))
型格式化字符串的代价有点大。这将避免格式化字符串,除非它确实需要。
ne5o7dgx2#
首先,你不需要写[..]如果你真的想恐慌,但也想格式化错误消息,我想我会使用assert!():
[..]
assert!()
fn main() { let x: Option<&str> = None; assert!(x.is_some(), "the world is ending: {}", "foo"); let _x = x.unwrap(); }
字符串如果你愿意,你也可以使用unwrap crate:
unwrap
use unwrap::unwrap; fn main() { let x: Option<&str> = None; let _x = unwrap!(x, "the world is ending: {}", "foo"); }
型此外,这两种方法每次都避免了错误String的构造,而不像用format!()调用expect()。
String
format!()
expect()
jhkqcmku3#
为了避免在Ok的情况下格式化和分配String的不必要开销,您可以将Option转换为Result,然后展开它:
Ok
fn main() { let x: Option<&str> = None; x.ok_or_else(|| format!("the world is ending: {}", "foo")) .unwrap(); }
字符串
3条答案
按热度按时间3gtaxfhh1#
我会做:
字符串
这是针对
Option
的,对于Result
,你需要忽略参数:型
格式化字符串的代价有点大。这将避免格式化字符串,除非它确实需要。
ne5o7dgx2#
首先,你不需要写
[..]
如果你真的想恐慌,但也想格式化错误消息,我想我会使用
assert!()
:字符串
如果你愿意,你也可以使用
unwrap
crate:型
此外,这两种方法每次都避免了错误
String
的构造,而不像用format!()
调用expect()
。jhkqcmku3#
为了避免在
Ok
的情况下格式化和分配String
的不必要开销,您可以将Option
转换为Result
,然后展开它:字符串