相关疑难解决方法(0)

如何以编程方式获取结构的字段数?

我有一个自定义结构,如下所示:

struct MyStruct {
    first_field: i32,
    second_field: String,
    third_field: u16,
}
Run Code Online (Sandbox Code Playgroud)

是否有可能以编程方式获取结构字段的数量(例如,通过方法调用field_count()):

let my_struct = MyStruct::new(10, "second_field", 4);
let field_count = my_struct.field_count(); // Expecting to get 3
Run Code Online (Sandbox Code Playgroud)

对于这个结构:

struct MyStruct2 {
    first_field: i32,
}
Run Code Online (Sandbox Code Playgroud)

......以下电话应该返回1:

let my_struct_2 = MyStruct2::new(7);
let field_count = my_struct2.field_count(); // Expecting to get count 1
Run Code Online (Sandbox Code Playgroud)

有没有像这样的API field_count()或者只能通过宏获得它?

如果使用宏可以实现这一点,那么应该如何实现?

struct rust rust-macros rust-proc-macros

20
推荐指数
2
解决办法
1886
查看次数

在宏中获取结构类型的字段

我想知道是否有办法在宏中获取结构的字段名称.请考虑以下示例:

struct S {
    a: String,
    b: String,
}
Run Code Online (Sandbox Code Playgroud)

和宏__CODE__,这样称为:

my_macro!(S);
Run Code Online (Sandbox Code Playgroud)

现在我想访问结构的字段名称,不知何故这样:

macro_rules! my_macro {
    ($t:ty) => {{
        let field_names = get_field_names($t);
        // do something with field_names
    }};
}
Run Code Online (Sandbox Code Playgroud)

我是Rust和宏的新手,所以也许我错过了一些明显的东西.

macros rust

11
推荐指数
3
解决办法
4020
查看次数

Rust在运行时如何存储类型?

A u32占用4个字节的内存,a String占用3个指针大小的整数(用于位置,大小和保留空间),在栈上加上一些内存。

在我看来,这意味着Rust在执行代码时不知道在特定位置存储什么类型,因为这种知识将需要更多的内存。

但是同时,是否不需要知道在0xfa3d2f10存储什么类型,以便能够解释该位置的字节?例如,要知道接下来的字节构成String堆上a的规范吗?

memory types rust

3
推荐指数
1
解决办法
126
查看次数

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

我正在尝试编写一个测试来确定是否struct A有一个属性a及其类型是i32.

pub struct A {
    a: i32,
}

#[test]
pub fn test_A() {
    assert!(A.hasattr("a"));
    assert_is_type!(A.a, i32);
}
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
4631
查看次数

标签 统计

rust ×4

macros ×1

memory ×1

rust-macros ×1

rust-proc-macros ×1

struct ×1

types ×1