簡體   English   中英

在Rust中,修改借用的指針會更改原始值嗎?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM