【发布时间】:2021-10-11 02:03:20
【问题描述】:
我试图创建一个替换的宏,
first: Some(first.as_ref().parse::<u64>().expect("Could not parse 'first'"))
我已经在 Clap with values_t! 等其他模块中看到了这一点,我试图抽象它并没有扩展到类型。这是我写的,
macro_rules! parse_u64 {
($var:ident) => {
Some(
$var
.as_ref()
.parse::<u64>()
.expect( format!("Could not parse '{:?}'", stringify!($var)) )
)
};
}
这会产生以下错误,
first: parse_u64!(first),
^^^^^^^^^^^^^^^^^ expected `&str`, found struct `String`
我在这里做错了什么:这是一个简单的宏,链中只有三件事?为什么会出现此错误,我该如何解决?
你可以在Rust Playground example看到这个
【问题讨论】:
-
对输入错误的恐慌让我的蜘蛛侠感觉刺痛。尽量不要养成它的习惯。最好使用
?等来传播错误,就像 Clap 一样。既然您要创建Option<u64>,我可以建议parse::<u64>().ok()吗? -
@JohnKugelman 没有宏,我假设 Rust 会告诉我期望在哪里,而不是当它说 "expected
&str, found structString" 我当有人立即在 Discord 中回答它时,正试图创建一个宏。我想这是一个常见的问题? -
@JohnKugelman 我刚刚知道了!我们去play.rust-lang.org/…