[英]In Rust, Does Modifying a Borrowed Pointer Change the Original Value?
这是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);
}
然后,我将此二维向量传递给另一个函数以进行进一步的初始化。
该函数看起来像这样。
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
。
有谁知道如何让另一个函数修改传递给它的参数?
任何帮助表示赞赏!
您正在使用哪个版本的Rust? 类型检查器不是抱怨使用
setT(&mut table);
我也有些难过。 当然,指针应该按预期工作!
这是类似代码的工作版本(rustc 0.5,提交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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.