【发布时间】:2019-06-08 04:49:02
【问题描述】:
我有一个自定义结构,如下所示:
struct MyStruct {
first_field: i32,
second_field: String,
third_field: u16,
}
是否可以通过编程方式获取结构字段的数量(例如,通过方法调用field_count()):
let my_struct = MyStruct::new(10, "second_field", 4);
let field_count = my_struct.field_count(); // Expecting to get 3
对于这个结构:
struct MyStruct2 {
first_field: i32,
}
...下面的调用应该返回1:
let my_struct_2 = MyStruct2::new(7);
let field_count = my_struct2.field_count(); // Expecting to get count 1
是否有类似field_count() 的 API 或者只能通过宏来获取?
如果这可以通过宏实现,应该如何实现?
【问题讨论】:
-
这样做的目的是什么?语言是静态类型的,所以函数是不变的,也就是说你总是会得到相同的答案,并且没有基于此做出有用的决定。
-
@Jan Hudec,假设您已经在程序的某些不同块上静态编写了计数,并且有时您更改了结构并添加了一个新字段。然后,我不想在其他可以自动处理的地方编辑计数
-
这仍然没有说明这些信息有什么用处。任何依赖于字段数量的代码都将在编译时依赖它,并且可能也依赖于字段的类型和名称。当字段发生变化时,它要么编译失败,要么生成,在这种情况下,生成器需要这些信息——而自定义派生是合适的工具。
标签: struct rust rust-macros rust-proc-macros