首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从rust宏中的"Foo::Bar“获取"Bar”?

在Rust中,要从宏中的"Foo::Bar"获取"Bar",可以使用Rust的反射功能和字符串处理方法来实现。具体步骤如下:

  1. 首先,需要使用反射功能获取"Foo::Bar"所对应的类型信息。Rust提供了std::any::type_name函数来获取类型的名称。在宏中,可以使用stringify!宏将"Foo::Bar"转换为字符串,然后使用type_name函数获取类型名称。
  2. 接下来,需要从类型名称中提取出"Bar"。可以使用字符串处理方法来实现,例如使用split函数将类型名称按"::"分割成多个部分,然后选择最后一个部分作为"Bar"。
  3. 最后,可以将"Bar"用作需要的目的,例如作为变量名、函数名等。

需要注意的是,Rust的宏在编译时展开,因此在宏中获取类型信息和处理字符串是在编译时进行的。以下是一个示例代码:

代码语言:txt
复制
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"并打印输出。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法提供相关链接。但是,腾讯云提供了丰富的云计算服务,包括云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Rust日报】2021-11-16 「投票」为Rust标准库添加控制台输入API

科学计算相关任务: 矩阵计算 数值分析 对编程语言要求: 对lambda良好支持; 简单易用函数组合; Rust语言本身对lambda(在Rust称为闭包)、通用组合和函数式编程有很好支持,...目前Rust语言实现跟科学计算相关crate列表,可以在此查看:Scientific Computing 在Rust测试trait多个实现 Testing multiple implementations..., Calculator, Foo}; use test_case::test_case; #[test_case(Foo::new())] #[test_case(Bar::...(c.add(10, 43), 53); } } 变量是如何在Python和Rust中保存——对比4: str/string How variables are saved in Python...在Rust,和string相关类型有: &str:字符串切片; String:动态扩容字符串; Docker Activity:获取docker容器统计数据和能耗 Get stats and the

48930

RustChinaConf 2022 大会议题回顾 | Part I : Rustdoc 你可以用它做什么以及它未来

很多更美好功能即将到来。例如,其中一个功能允许你源代码页面直接跳到一个项目的定义或其文档页面。 本讲座[1]将介绍这些功能,让你了解rustdoc允许你做什么。...如何用 rustdoc 创建文档 在 Rust 里可以通过基本文档注释 /// 和 //!来创建文档, Guillaume 在演讲视频也做了演示,因为这是最基本语法,本文里就不做过多介绍。...利用文档测试可以做很多事情,比如: 在编写时候,可以将文档测试代码设置为测试时编译失败 在一些场景忽略某些测试代码 其他 相关设置: // 使用 ignore 可以让测试忽略代码 /// ``...](Bar "bar") pub struct Foo2; /// This struct is also not [bar][b] /// /// [b]: Bar pub struct Foo3;...Foo1; 所以,/// 是 #[doc] 属性语法糖。

55820

深入浅出 Babel 下篇:既生 Plugin 何生 Macros

,如 Rust、Nim、Julia、Elixir,它们是如何解决技术问题, 实现类Lisp系统?...let temp_10 = foo; // temp变量被重命名为temp_10 foo = bar; bar = temp_10; 如果你想引用外部变量,也可以。...你必须在源代码通过导入语句声明你使用了 Macro;而基于插件方式,你可能不知道preval这个标识符哪里来? 如何被应用?何时被应用?..., 在其回调可以获取到一些关键对象: babel 和普通Babel插件一样,Macro 可以获取到一个 babel-core 对象 state 这个我们也比较熟悉,Babel 插件 visitor...形式调用,但是标签模板字符串可能包含内插字符串,例如: hello` hello world ${foo} + ${bar + baz} ` 其 AST 结构如下: ?

1.5K31

Rust 1.51.0 已正式发布,及其新特性详述

如果您已通过 rustup 安装了早期版本 Rust,那么获取 Rust 1.51.0 就很容易(各平台通用命令): rustup update stable 如果官网下载速度过慢,参考配置 Rust...,可以 Rust 官网页面获取 rustup,并可以在 GitHub 站点查看 Rust 1.51.0 详细发行说明。...例如,假设您有一个名为 foo 依赖项,它特性是 A 和 B,bar 和 baz 正在使用这个依赖项,但是 bar 依赖于 foo+A,baz 依赖于 foo+B。...Cargo 将合并这两个特性,并将 foo 编译为 foo+AB。这样做好处是,您只需编译 foo 一次,然后它就可以被 bar 和 baz 重用。 然而,这也带来了不利一面。...Rust 回溯支持非常聪明,知道如何找到这些 .o 文件。lldb 等工具也知道如何做到这一点。只要你不需要在保留调试信息同时,将二进制文件移动到其它位置,就应该可以这样做。

1.2K10

2023年,Rust能干掉JavaScript吗?

开发者体验如何、错误处理功能是否强大、怎样解决 SSR 问题等也都非常重要。要想做出明智最终选择,必须先为这些问题找到合理答案。幸运是,Rust 同样是有备而来。...开发者体验 不管大家主观判断如何,在 Web 开发方面,Rust 有着相对宽松使用要求。...其中很多代码样式上跟 React 等 Web 框架 JavaScript 组件非常相似——比如 Leptos(一款 Rust Web 框架)组件代码:...下面来看看 Rust 基本错误处理机制: async fn foo() -> Result{let bar = String::from...Shuttle 另一个优点就是采取基础设施即代码实现理念,可以通过代码注释快速上手。只需简单通过 Rust 在 main 函数声明,大家就能避免亲自动手鼓捣配置文件。

76420

听GPT 讲Rust源代码--srctools(9)

解决重名冲突:在重新排序实现项过程,可能会出现重名冲突情况。该处理器可以检测和解决冲突,以确保代码正确性。 在该文件FooBar 作为示例结构体,用来展示如何重新排序实现项。...作用是实现Rust语言中模块移动”操作功能。...Foo: 一个Foo类型。 Bar: 一个Bar类型。 DocumentedStruct: 一个有文档注释结构体类型。 MacroedStruct: 一个通过生成结构体类型。...Foo,Bar:代表两个结构体,可能是具有不同可见性结构体,其中Foo可能是私有的,而Bar可能是公共。 Baz:代表另一个结构体,可能也是具有不同可见性结构体。...trait Bar:该trait定义了一个获取排序项方法。它被用作一个辅助特性,用于在排序时获取排序项信息。 枚举类型Bar:表示一个排序项类型。

16931

Rust 1.37.0 稳定版发布

Rust 1.37.0 亮点包括通过类型别名引用枚举变量、内置 cargo vendor、对使用未命名 const、配置文件引导优化、Cargo  default-run 和枚举上 #[repr...内置 cargo 支持独立依赖关系 cargo vendor 命令集成到 Cargo,该命令获取项目的所有依赖项,将它们解压缩到 vendor/ 目录,并展示了在构建过程中使用分布式代码所需配置片段...在 Rust 1.37.0,可以更容易地为静态分析目的创建人机工程学和可重用声明性和过程。...Foo { foo: u32 }, Bar { bar: u32 }, } 在枚举上使用 #[repr(align(N))] 语义与使用该对齐定义包装器结构体 AlignN 一样...Rust 1.37.0 方式如下: $ rustup update stable 或者访问官网获取:https://www.rust-lang.org/install.html. .详情见发布说明

77920

我用 Rust 重写了博客,谈谈我眼中 Rust.

Rust 编译器就像导师一样耳提面命,为你指出代码问题(但是有时候,我觉得 Rust 编译器也像导 师一样,太啰嗦了 !...Lisp 系语 言,使用过 Lisp 方言同学自然会明白强大,《黑客与画家》作者 Paul Gram 也是忠实粉丝。...($func_name)) } ) }// Create functions named `foo` and `bar` with the above macro.create_function...(bar); 使用上面的定义,我就创建了一个 foo() 和 bar() 函数,然后就可以直接调用: fn main() { foo(); bar(); } Rust 系统极具表现力...而 Rust 很多新特性 都是没办法已有的编程语言那里找到类似的特性,所以必须以 Rust 思维去学习 Rust, 而不能抱着 Java 或者 C++ 思维学,因为这样一定会撞得头破血流,

3.9K20

Rust错误处理机制

在一些典型面向对象语言,例如 Java 和 Python ,错误使用 try…catch 语法进行处理,但这种机制却存在显著问题。...Rust 错误处理机制与 Golang 特别相似,它将错误分为可恢复错误和不可恢复错误。如果遇到不可恢复错误程序将奔溃退出, 而可恢复错误则就像一个正常函数返回值一样。...Rust 有两种语法来实现可恢复错误和不可恢复错误,它们分别是 Result<T, E> 和 panic!。前者是一个泛型枚举,后者则是一个。 不可恢复错误 使用 panic!...是创建不可恢复错误最简便用法: fn main() { panic!("error!"); println!...fn foo() -> Result { let x = bar()?; // bar 错误类型需要与 foo 错误类型相同 ... } ?

1.1K20

【每周一库】- Mockall 一个强大Rust对象模拟库(第四部分——完结)

(4, mock.foo(4)); 多重特征与继承特征 在创建一个可以实现多种特征模拟结构型时,无论有没有继承,都需要使用mock!。但在创建之后,模拟对象使用方法无异。...{ // 需要模拟结构型 C {} // C 需要实现第一个特征 trait A { fn foo(&self); } // C需要实现第二个特征...(|| ()); mock.expect_bar().returning(|| ()); mock.foo(); mock.bar(); 外部特征 Mockall还可以模拟在你控制之外外部包定义特征与结构型...如果你需要在多个不同测试中使用一个静态方法,必须要提供专属同步。普通方法,期望是设置在模拟对象之上。...(43, do_stuff()); } } 模块 除了可以模拟外部方程之外,Mockall还可以为所有Rust方程模块派生出模拟,这个功能需要使用每日构建功能,在你需要启用feature

72830

Rust日报】2021-08-28 开源操作系统夏令营最终报告会安排

彭淳毅 陈志扬 基于rCore-Tutorial性能分析软件实现 crates.live:可视化 Rust crates 依赖项 crates.live 是来自 crates.io Rust crates...它显示了 Rust crates(包)依赖树。功能包括: 依赖解析, crates.live 引擎通过匹配依赖版本来完成完整依赖解析。 交互式图表,带有标记板条箱可缩放交互式图表。...crates.live 使用了一堆技术框架,技术栈包括: Rust, crates.live 后端和爬虫是用 Rust 和开源 Rust 库开发。...链接:https://crates.live/ Obake,版本化数据结构 Obake 是一个用于声明和维护版本化数据结构过程。...["0.1.0"]) -> Self { Self { bar: 0 } } } // an enumeration of all versions of `Foo` is accessed

56520
领券