Rust 有没有办法检查结构是否有字段并检查其类型?

Rust 有没有办法检查结构是否有字段并检查其类型?,rust,Rust,我正在尝试编写一个测试,以确定struct a是否具有属性a,其类型是否为i32 pub结构A{ a:i32, } #[测试] pub fn test_A(){ 断言!(A.hasattr(“A”); 断言_是_类型!(A.A,i32); } 在Rust中,与Python等某些语言不同,所有值的类型必须在编译时已知。这个测试没有意义,因为为了编译代码,您必须已经知道答案 如果结构中的字段是可选的,请将其放入选项中 pub结构A{ 答:选择, } 如果您在多个结构之间有共同的功能,请为其创建一个

我正在尝试编写一个测试,以确定
struct a
是否具有属性
a
,其类型是否为
i32

pub结构A{
a:i32,
}
#[测试]
pub fn test_A(){
断言!(A.hasattr(“A”);
断言_是_类型!(A.A,i32);
}

在Rust中,与Python等某些语言不同,所有值的类型必须在编译时已知。这个测试没有意义,因为为了编译代码,您必须已经知道答案

如果结构中的字段是可选的,请将其放入
选项中

pub结构A{
答:选择,
}
如果您在多个结构之间有共同的功能,请为其创建一个特性

发布它{
fn get_a(&self)->i32;
}

在Rust中,与Python等某些语言不同,所有值的类型必须在编译时已知。这个测试没有意义,因为为了编译代码,您必须已经知道答案

如果结构中的字段是可选的,请将其放入
选项中

pub结构A{
答:选择,
}
如果您在多个结构之间有共同的功能,请为其创建一个特性

发布它{
fn get_a(&self)->i32;
}

您可以在编译时通过尝试在需要该类型的上下文中使用该类型来断言该类型具有特定类型的属性:

macro\u规则!断言\u是\u类型{
($t:ty,$i:ident:$ti:ty)=>{
常数:()={
fn假人(v:$t){
设u:$ti=v.$i;
}
};
}
}
发布结构A{
a:i32,
}
断言\u是\u类型!(A,A:i32);
//不编译
断言\u是\u类型!(A,b:i32);
断言\u是\u类型!(A,A:164);

您可以在编译时通过尝试在需要该类型的上下文中使用该类型来断言该类型具有特定类型的属性:

macro\u规则!断言\u是\u类型{
($t:ty,$i:ident:$ti:ty)=>{
常数:()={
fn假人(v:$t){
设u:$ti=v.$i;
}
};
}
}
发布结构A{
a:i32,
}
断言\u是\u类型!(A,A:i32);
//不编译
断言\u是\u类型!(A,b:i32);
断言\u是\u类型!(A,A:164);

a
必须是字符串,还是可以是ident令牌?@mcarton很抱歉弄混了
a
不一定是字符串,它只是一个占位符。相关:
a
必须是字符串,还是可以是一个标识令牌?@mcarton很抱歉弄混了
a
不必是字符串,它只是一个占位符。相关:这可能是给出问题的最佳解决方案,但它确实要求在同一模块中完成测试,或者将字段标记为public。然而,我仍在努力为此类测试想出一个用例。@Locke我能想到的唯一用例是测试公共API是否不变。这可能是给出问题的最佳解决方案,但它确实要求在同一个模块中进行测试或将字段标记为公共。然而,我仍然在努力为这种测试想出一个用例。@Locke我能想到的唯一用例是测试公共API不会改变。