rust - 有没有办法将结构体的属性指定为函数的参数?

标签 rust

这是我用于 Snake 程序的结构 Area:

struct Area {
    max_x: usize,
    max_y: usize,

    arr: Vec<Vec<&'static str>>
}

下面是使用结构体 Area 中的 arr 属性的函数:

fn refresh(area: &Area) {
    println!("{:?}", area.arr)
}

由于它只需要结构中的一个属性,因此我希望参数可以是该命名属性,这样我就不必编写太多内容。它看起来像这样(这会产生错误):

fn refresh(array: &Area.arr) {
    println!("{:?}", array)
}

是否有任何解决方法可以做类似的事情?

最佳答案

是的,您可以像这样更改refresh函数的签名

fn refresh(area_arr: &Vec<Vec<&'static str>>) {
    println!("{:?}", area_arr)
}

然后你可以这样调用它

refresh(&your_area_instance.arr);

这是完整的代码示例

struct Area {
    max_x: usize,
    max_y: usize,

    arr: Vec<Vec<&'static str>>
}

fn main() {
    let area_instance = Area {
        max_x: 20,
        max_y: 20,
        arr: vec![
            vec![&"test1_1", &"test1_2"],
            vec![&"test2_1", &"test2_2"],
        ]
    };
    refresh(&area_instance.arr);
}

fn refresh(area_arr: &Vec<Vec<&'static str>>) {
    println!("{:?}", area_arr)
}

和一个Playground link .

关于rust - 有没有办法将结构体的属性指定为函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66938270/

相关文章:

multithreading - 使用Mutex防止同时处理同一类型时进行多线程列表迭代

rust - 如何将 u8 的向量打印为字符串?

rust - 将迭代器作为反模式参数传递给函数吗?

iterator - 是否有提供 `iter()` 的特征?

rust - 为什么我不能为 Display+Debug 的泛型类型实现 std::error::Error 但有一个不是 Display+Debug 的泛型参数?

Rust 模式与现有绑定(bind)匹配?

rust - 为什么函数调用顺序会影响借用?

rust - 为什么 ok_or 在选项上使用时适合替代 let-else?

redis - 将 mget 与 redis-rs 一起使用时参数数量错误

rust - 有没有一种方法可以在Rust中使用avro-rs序列化JSON值?