作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
原始需求:我想实现一个将Foo::*
转换为Bar::*
的宏。
伪代码将如下所示:
macro_rules! convert_foo_to_bar {
($v: ty, $p: path) => (<$v>::$p.name)
}
// convert_foo_to_bar!(Bar, Foo::A) -> Bar::A
而
$p.name
指的是
A
。
最佳答案
您可以使用Foo::A
匹配Foo::$variant:ident
,以将A
作为$variant
进行获取,如下所示:
macro_rules! convert_foo_to_bar {
($v: ty, Foo::$variant:ident) => (<$v>::$variant)
}
Playground
fn convert_foo_to_bar(foo: Foo) -> Bar {
match foo {
Foo::A => Bar::A,
Foo::B => Bar::B,
// .. for all of your variants
}
}
关于rust - 如何在rust宏中从 “Bar”获得 “Foo::Bar”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63206240/
我是一名优秀的程序员,十分优秀!