gpt4 book ai didi

rust - 你能写一个宏来调用 Rust 中的 default() 运算符吗?

转载 作者:行者123 更新时间:2023-11-29 08:28:08 25 4
gpt4 key购买 nike

类似于:

macro_rules! default(
($T:ty, $($args:expr)*) => (
$T { $($args)*, ..Default::default() };
);
)

...但是使用魔法类型而不是 expr,所以你可以这样做:

let p = default!(CItem, _z: ~"Hi2", x: 10);
let q = default!(CItem, _z, ~"Hi2", x, 10);
let r = default!(CItem, { _z: ~"Hi2", x: 10 });

或者类似的东西?

是否有任何宏符号可以简单地获取字符的文字 block 而不首先将其解析为类型/表达式/等?

(我知道你通常只写一个 CItem::new(),但在某些情况下这似乎是个不错的情况)

最佳答案

宏可以有多个模式来匹配语法,所以你必须像这样为每种情况分别编写一个单独的模式:

macro_rules! default(
($t:ident, $($n:ident, $v:expr),*) => {
$t { $($n: $v),*, ..Default::default() }
};
($t:ident, $($n:ident: $v:expr),*) => {
default!($t, $($n, $v),*)
};
)

如您所见,有两种模式,第一个匹配对用逗号分隔,第二个匹配对用冒号分隔。

关于rust - 你能写一个宏来调用 Rust 中的 default() 运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22602205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com