1

这是锈 0.4

我相信确实如此,但对于我的特定用例来说似乎并非如此。

我有一个指向向量的自有指针的自有指针。

我将其构造如下。

let mut table = ~[];
for [0, ..10].each |i| {
    let mut row = ~[];
    for [0, ..128].each |j| {
        row.push(A_CERTAIN_ENUM);
    }
    table.push(row);
}

然后,我将这个二维向量传递给另一个函数以进行进一步初始化。

该函数看起来像这样。

fn setT (table: &mut ~[~[SomeEnumType]]) {
    // Demonstration purposes...
    for [0, ..10].each |i| {
        for [0, ..128].each |j| {
            table[*i][*j] = A_DIFFERENT_ENUM;
        }
    }
}

我使用以下代码调用该函数。

setT(&table);

然而,经检查,内容table没有任何变化!里面的一切都是静止A_CERTAIN_ENUMA_DIFFERENT_ENUM

有谁知道如何让另一个函数修改您传递给它的参数?

任何帮助表示赞赏!

4

2 回答 2

1

你使用的是哪个版本的 Rust?类型检查器没有抱怨使用

setT(&mut table);

我也有点难过。当然,指针应该按预期工作!

于 2012-11-29T08:08:07.243 回答
0

这是类似代码的工作版本(rustc 0.5,commit 19f5f91):

enum Direction {
    North,
    East,
    South,
    West
}

fn main() {
    let mut table = ~[];
    for [0, ..10].each |i| {
        let mut row = ~[];
        for [0, ..128].each |j| {
            row.push(North);
        }
        table.push(copy row);
    }
    io::print(fmt!("before: %d\n", table[0][0] as int));
    setT(&mut table);
    io::print(fmt!("after: %d\n", table[0][0] as int));
}

fn setT(table: &mut ~[~[Direction]]) {
    for [0, ..10].each |i| {
        for [0, ..128].each |j| {
            table[*i][*j] = East;
        }
    }
}

输出:

before: 0
after: 1
于 2012-11-29T11:54:41.463 回答