如何在 Rust 中获取结构字段名称?
How to get struct field names in Rust?
是否有一些等效于 JS 的 Object.keys() for Rust's struct?
我需要一些东西来从结构字段名称生成 CSV headers(我使用 rust-csv)。
struct Export {
first_name: String,
last_name: String,
gender: String,
date_of_birth: String,
address: String
}
//... some code
let mut wrtr = Writer::from_file("/home/me/export.csv").unwrap().delimiter(b'\t');
wrtr.encode(/* WHAT TO WRITE HERE TO GET STRUCT NAMES as tuple of strings or somethings */).is_ok()
目前Rust中元编程的主要方法是via macros。在这种情况下,您可以捕获所有字段名称,然后添加一个 returns 字符串形式的方法:
macro_rules! zoom_and_enhance {
(struct $name:ident { $($fname:ident : $ftype:ty),* }) => {
struct $name {
$($fname : $ftype),*
}
impl $name {
fn field_names() -> &'static [&'static str] {
static NAMES: &'static [&'static str] = &[$(stringify!($fname)),*];
NAMES
}
}
}
}
zoom_and_enhance!{
struct Export {
first_name: String,
last_name: String,
gender: String,
date_of_birth: String,
address: String
}
}
fn main() {
println!("{:?}", Export::field_names());
}
对于高级宏,请务必查看 The Little Book of Rust Macros。
是否有一些等效于 JS 的 Object.keys() for Rust's struct?
我需要一些东西来从结构字段名称生成 CSV headers(我使用 rust-csv)。
struct Export {
first_name: String,
last_name: String,
gender: String,
date_of_birth: String,
address: String
}
//... some code
let mut wrtr = Writer::from_file("/home/me/export.csv").unwrap().delimiter(b'\t');
wrtr.encode(/* WHAT TO WRITE HERE TO GET STRUCT NAMES as tuple of strings or somethings */).is_ok()
目前Rust中元编程的主要方法是via macros。在这种情况下,您可以捕获所有字段名称,然后添加一个 returns 字符串形式的方法:
macro_rules! zoom_and_enhance {
(struct $name:ident { $($fname:ident : $ftype:ty),* }) => {
struct $name {
$($fname : $ftype),*
}
impl $name {
fn field_names() -> &'static [&'static str] {
static NAMES: &'static [&'static str] = &[$(stringify!($fname)),*];
NAMES
}
}
}
}
zoom_and_enhance!{
struct Export {
first_name: String,
last_name: String,
gender: String,
date_of_birth: String,
address: String
}
}
fn main() {
println!("{:?}", Export::field_names());
}
对于高级宏,请务必查看 The Little Book of Rust Macros。