You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过derive宏修改或生成其作用的结构体内部代码?

关于Rust derive宏的作用范围说明

核心结论

  • derive宏无法修改所作用的结构体内部定义,仅能在结构体外部生成额外的附加代码,因此不能通过derive宏为示例中的Building结构体新增height: u8字段。

具体原因

Rust的derive宏属于特殊的属性宏类别,设计定位是为现有类型自动生成trait实现(比如我们常用的#[derive(Debug, Clone)]就是自动生成对应trait的实现代码)。它工作时只会读取被标记结构体/枚举的定义作为输入,输出的新代码会和原结构体定义并行存在,完全不会修改原有结构体的任何内容。

对应需求的解决方案

如果确实需要为结构体动态新增字段,你可以使用普通属性宏(直接以#[some_macro]标记在结构体定义上方,而非放在derive属性内)。普通属性宏支持替换原有结构体的完整定义,你可以在宏逻辑中解析原有结构体的字段列表,补充需要新增的字段后,输出完整的新结构体定义即可实现需求。

举个简单的实现逻辑示例:

  1. 接收原Building结构体的输入Token流,解析出其可见性、结构体名、现有colour: String字段
  2. 构造新的结构体定义,在原有字段后追加height: u8字段
  3. 输出新的结构体定义,直接替换掉原有代码

内容的提问来源于stack exchange,提问作者Timur Guvenkaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:45:00