borrow-checker

    4熱度

    2回答

    Rust的核心特徵之一是編譯時強制引用的安全性,這是通過所有權機制和明確的生命週期來實現的。是否有可能實現'定製'的參考,將受益於相同? 考慮下面的例子。我們有一個代表圖形的對象。假設我們可以通過引用邊來遍歷圖,但是,這些引用是作爲自定義索引實現的,而不是指向某些內存的指針。這樣的索引可能只是一個數組(或三個)的偏移量,但它也可以是結合某些標誌的結構等。 除了遍歷圖,我們也可以對其進行修改,這意味

    2熱度

    2回答

    我試圖做一個簡單的LISP解析器,但是我卡在了將令牌向量轉換成AST節點樹的步驟。 我創建了樹的根,然後在當前想要添加下一個節點的樹中維護一堆引用。問題是不管我嘗試什麼,似乎借用檢查器認爲我所指的東西不夠長。 這是代碼: pub fn parse(tokens: &Vec<Token>) -> Node { let mut root: Vec<Node> = vec![];

    2熱度

    2回答

    有多個std::collections::LinkedList s的正確方法是什麼?這些列表的數量在編譯時是未知的嗎? 我與數據填充它們,以及將它們合併(例如,使用append())。 我認爲最好有一個包含這些列表的向量,或者包含對這些列表的引用。 我曾嘗試以下: use std::collections::LinkedList; fn listtest() { let mut v:

    4熱度

    1回答

    我想設計一個支持可變迭代器的玩具容器類,但是我無法整理迭代器的生命週期及其對容器的引用。 我試圖創建一個最小的非編譯例如: struct Payload { value: i32, } struct Container { val: Payload, } struct IterMut<'a> { cont: &'a mut Container,

    2熱度

    1回答

    在this github discussion你覺得這個代碼,吸引借檢查的憤怒: fn main() { let mut vec = vec!(); match vec.first() { None => vec.push(5), Some(v) => unreachable!(), } } 我明白爲什麼有突變,而不變的是借力優秀是有問

    3熱度

    1回答

    我寫這個代碼狀態之間進行轉移,但如果未能通過借檢查: struct State { // ... } impl State { fn next(self) -> (Self, u32) { // ... } } struct StateHolder { state: State } impl StateHolder {

    2熱度

    1回答

    我工作的一個(而野心勃勃的)文本編輯器,我想實現任意垂直和水平分割中顯示文本緩衝區,這樣的事情: buffer ----------------- buffer | -------| buffer buffer | 我有這樣的結構,表示爲二叉樹型件事: h /\ v b /\ b h /\ b b 其中v是垂直分割,h是水平分割,並b是一個緩衝區。 以

    2熱度

    2回答

    如果我們運行this那麼我們正確地得到錯誤「不能分配給不可變字段a.x」。 如果我們刪除了兩條//評論,並且註釋掉這條不好的行,那麼我們得到錯誤「無法分配給&引用中的數據」。這是有道理的,因爲&mut不提供內部可變性。我們可以自由地重新借出&A,所以這不能給予可變訪問權限,ala &&mut是&&。 如果我們刪除//評論和/* */評論,那麼整個事情編譯,允許壞行違反我們的不變,a.x絕不能指向別

    3熱度

    2回答

    我面臨的問題是價值被放棄,而它仍然在Option內借來的,但我很難很好地掌握什麼是繼續。爲了說明這一點,這裏是什麼,我其實是想實現一個工作示例: fn foo() -> Option<String> { let hd = match std::env::home_dir() { Some(d) => d, None =

    1熱度

    2回答

    考慮下面的示例程序「吸」法借: struct Data { output: Vec<u8>, array: Vec<u8> } impl Data { fn peek(&self) -> u8 { self.array[0] } fn write(&mut self) { self.output.push(self.p