[英]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.