作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
"B foo", C(ref a) => "C foo", -6ren">
我有一些重复的代码
match *x {
A(ref a) => "special",
B(ref a) => "B foo",
C(ref a) => "C foo",
D(ref a) => "D foo",
// ...
}
我想要一个像这样的宏
macro_rules! generic_fmt {
($T:ident) => {
$T(ref a) => {"$T foo"},
}
}
这样我就可以简化我的匹配
match *x {
A(ref a) => "special",
generic_fmt!(B),
generic_fmt!(C),
generic_fmt!(D),
// ...
}
最好的方法是什么?我正在使用 rustc 1.19.0-nightly。
最佳答案
你不能完全那样做。宏不能扩展为 match
ARM (<Variant> => <Expression>
)。
你能得到的最接近的可能是这样的:
enum Foo {
A(u32),
B(u32),
C(u32),
D(u32),
}
macro_rules! gen1 {
($Variant:ident) => {
Foo::$Variant(ref a)
}
}
macro_rules! gen2 {
($Variant:ident) => {
concat!(stringify!($Variant), " foo")
}
}
fn print(x: Foo) {
println!("{}", match x {
Foo::A(ref a) => "special",
gen1!(B) => gen2!(B),
gen1!(C) => gen2!(C),
gen1!(D) => gen2!(D),
});
}
fn main() {
print(Foo::A(42));
print(Foo::B(42));
print(Foo::C(42));
print(Foo::D(42));
}
关于rust - 如何为相似的匹配武器编写宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44033221/
背景 假设我们有一个“随机”生成怪物和武器的游戏。 武器可以这样定义: 类型:斧 (1.2)/剑 (1.4)/矛 (1)/棍 (0.7) 范围:1 - 3 魔法:冰 (10)/火 (10)/无 (1)
我的任务是使用 ArrayList、hashmap、抽象类和接口(interface)在 java 中创建一个项目。我决定用 java 开发一个基于文本的 RPG。我想对怪物使用抽象类,对库存使用 A
我是一名优秀的程序员,十分优秀!