Dynamic 有没有办法捕获未知的结构字段?

Dynamic 有没有办法捕获未知的结构字段?,dynamic,struct,rust,field,Dynamic,Struct,Rust,Field,不是。Rust是一种静态编译语言;所有问题都必须在编译时解决。字段存在或不存在 即使字段是有条件存在的,您也不知道它是什么类型,因此也不知道它上存在什么方法。编译器不知道字段的大小,因此无法为结构分配空间 您更可能希望使用: struct测试{ 意外_字段:选项, } 或者你也可以换成一辆汽车 从编辑角度来说,这是使用静态编译语言的一个重要原因,这是一件很棒的事情 它将被编译器捕获。这不是在执行前捕获的最佳情况吗?即使在语言中有动态宏,在运行时解析AST,也将非常有用(构建您自己的DSL语言

不是。Rust是一种静态编译语言;所有问题都必须在编译时解决。字段存在或不存在

即使字段是有条件存在的,您也不知道它是什么类型,因此也不知道它上存在什么方法。编译器不知道字段的大小,因此无法为结构分配空间

您更可能希望使用:

struct测试{
意外_字段:选项,
}
或者你也可以换成一辆汽车



从编辑角度来说,这是使用静态编译语言的一个重要原因,这是一件很棒的事情

它将被编译器捕获。这不是在执行前捕获的最佳情况吗?即使在语言中有动态宏,在运行时解析
AST
,也将非常有用(构建您自己的
DSL
语言..等等)。最后,我们有了
不安全的
(你可能会自食其果),所以我希望在这种语言的未来引入动态工件。@Tigran宏不是在运行时解析的,它们在编译过程中被解析,就像普通的Rust代码一样。Rust是一种系统编程语言,因此我非常怀疑将来是否会引入动态语言(la Ruby/Javascript/Python)。@Tigran您可能在寻找解析器或脚本语言引擎,而不是核心语言功能。幸运的是,crates.io在这一端有你的服务。
struct Test;

// here must be code to overload the standard field resolution methods

fn main() {
    let t = Test;
    println!("I wanna catch request for unknown struct field {}", t.unexpected_field)
}
struct Test {
    unexpected_field: Option<i32>,
}