这是Rust 0.4
我相信它确实如此,但对于我的特定用例似乎并非如此。
我有一个拥有指向vector的指针向量的指针。
我将其构建如下。
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_ENUM
,而不是A_DIFFERENT_ENUM
。
有谁知道如何让另一个函数修改你传递给它的参数?
感谢任何帮助!
答案 0 :(得分:1)
您使用的是哪个版本的Rust?类型检查器没有抱怨使用
setT(&mut table);
我也有点难过。当然,指针应该按预期工作!
答案 1 :(得分: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