小编rom*_*ows的帖子

可变多维数组作为函数参数

在rustc 1.0.0中,我想编写一个函数来改变调用者提供的二维数组.我希望这会奏效:

fn foo(x: &mut [[u8]]) {
    x[0][0] = 42;
}

fn main() {
    let mut x: [[u8; 3]; 3] = [[0; 3]; 3];
    foo(&mut x);
}
Run Code Online (Sandbox Code Playgroud)

它无法编译:

$ rustc fail2d.rs
fail2d.rs:7:9: 7:15 error: mismatched types:
 expected `&mut [[u8]]`,
    found `&mut [[u8; 3]; 3]`
(expected slice,
    found array of 3 elements) [E0308]
fail2d.rs:7     foo(&mut x);
                    ^~~~~~
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)

我相信这告诉我,我需要以某种方式为函数提供一片切片,但我不知道如何构造它.

如果我在函数签名中硬编码嵌套数组的长度,它"有效".这是不可接受的,因为我希望函数在任意维度的多维数组上运行:

fn foo(x: &mut [[u8; 3]]) {  // FIXME: don't want to hard code length of nested …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
1773
查看次数

标签 统计

rust ×1