如何在 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