gpt4 book ai didi

带加号的 Rust 宏重复

转载 作者:行者123 更新时间:2023-12-03 11:26:22 25 4
gpt4 key购买 nike

+ 运算符如何用作重复分隔符?

fn dot(self, rhs: Self) -> S {
$(self.$s * rhs.$s)++
}

$s 将是 xyz,所以我希望宏扩展到self.x * rhs.x + self.y * rhs.y + self.z * rhs.z。如果我写 $(self.$s * rhs.$s)-+,那么它可以工作并扩展为减法,但我需要加法,是否可以转义 + token ?

最佳答案

不幸的是,this isn't directly possible (从 rustc 1.41 开始)。该问题中提到的解决方法是将加号放在重复中的每个项目之前,并使用一个单独的宏来去除前面的额外加号。

macro_rules! strip_plus {
(+ $($rest: tt)*) => {
$($rest)*
}
}

它是这样使用的:

macro_rules! sum_all {
($($items: tt)+) => {
strip_plus!($(+ $items)+)
}
}

fn main() {
assert_eq!(sum_all!(1 2 3 4 5), 15);
}

(playground)

关于带加号的 Rust 宏重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60187436/

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