1

これはRust 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);
}

次に、この 2 次元ベクトルを別の関数に渡して、さらに初期化します。

機能はこんな感じ。

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_ENUMますA_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 に答える