在Rust中,要从宏中的"Foo::Bar"获取"Bar",可以使用Rust的反射功能和字符串处理方法来实现。具体步骤如下:
std::any::type_name
函数来获取类型的名称。在宏中,可以使用stringify!
宏将"Foo::Bar"转换为字符串,然后使用type_name
函数获取类型名称。split
函数将类型名称按"::"分割成多个部分,然后选择最后一个部分作为"Bar"。需要注意的是,Rust的宏在编译时展开,因此在宏中获取类型信息和处理字符串是在编译时进行的。以下是一个示例代码:
use std::any::type_name;
macro_rules! get_bar_from_foo {
($foo:expr) => {
{
let type_str = stringify!($foo);
let type_parts: Vec<&str> = type_str.split("::").collect();
let bar = type_parts.last().unwrap();
bar
}
};
}
fn main() {
let bar = get_bar_from_foo!(Foo::Bar);
println!("{}", bar);
}
这段代码定义了一个名为get_bar_from_foo
的宏,它接受一个表达式$foo
,并通过反射和字符串处理获取"Bar"。在main
函数中,我们使用get_bar_from_foo
宏来获取"Bar"并打印输出。
对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法提供相关链接。但是,腾讯云提供了丰富的云计算服务,包括云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。
领取专属 10元无门槛券
手把手带您无忧上云