borrow-checker

    1熱度

    1回答

    我正在學習Rust並試圖編寫websocket服務器。邏輯如下:WSConnectionFactory創建處理傳入消息並根據任意規則將其發送到其他客戶端的WSHandler。 問題是我不知道如何實現這樣的行爲。 限制:我不能更改Factory和Handler特徵的簽名,因爲它們由ws-rs庫提供。 問:如何使用RefCell/Cell實現這個功能? extern crate rand; exte

    0熱度

    1回答

    我想了解如何在Rust中做一些簡單的事情,但我一直在努力結束與借用檢查器的對抗,我不知道爲什麼。我寫了一個簡單的函數,在其中傳遞一個文件名,併爲您提供主目錄中該文件的路徑。 這裏的程序: use std::env; fn filename_in_homedir(filename: &str) -> Option<&str> { let mut homedir = match env:

    4熱度

    2回答

    我很清楚,遍歷一個向量不應該讓循環體任意改變向量。這可以防止迭代器失效,這很容易出現錯誤。 但是,並非所有種類的變異導致迭代器失效。請看下面的例子: let mut my_vec: Vec<Vec<i32>> = vec![vec![1,2], vec![3,4], vec![5,6]]; for inner in my_vec.iter_mut() { // <- or .iter()

    3熱度

    3回答

    我有一組向量,我想要刪除向量中其他集的子集的所有集。例如: a = {0, 3, 5} b = {0, 5} c = {0, 2, 3} 在這種情況下,我想刪除b,因爲它是a一個子集。我很喜歡使用「啞」n²算法。 不幸的是,使用借用檢查器來處理它非常棘手。我想出的最好的是(Playground): let mut v: Vec<HashSet<u8>> = vec![]; let mu

    4熱度

    2回答

    我試圖在Rust中實現一個懶惰構造/ memoized評估/緩存成語。 它的工作方式是有一個外部類型,它有一堆數據和一個存取方法。訪問器方法需要返回緩存計算(如果有),或者計算它並將返回值存儲在映射中以供將來使用。緩存的值不需要引用外部值,因此不存在循環引用問題;但它確實需要訪問外部值的數據才能構建自己。 這裏的,其不通過鏽蝕的借檢查一個完整的例子: use std::collections::H

    0熱度

    1回答

    我想在一個對象被傳遞給改變其狀態的另一個對象後以只讀方式訪問對象。我知道訪問一個對象的時候仍然存在一個問題,那就是當它仍然受到借用的控制時。 extern crate renderay_rs; use renderay_rs::*; fn draw_canvas(canvas: &Canvas) { let max_height = canvas.height; let

    0熱度

    1回答

    我試圖讓映射一個字符串轉換爲整數的迭代器: fn main() { use std::collections::HashMap; let mut word_map = HashMap::new(); word_map.insert("world!", 0u32); let sentence: Vec<&str> = vec!["Hello", "wor

    1熱度

    1回答

    我需要初始化一個項目(fn init(&mut self) -> Option<&Error>),並在沒有錯誤的情況下使用它。 pub fn add(&mut self, mut m: Box<Item>) { if let None = m.init() { self.items.push(m); } } 這工作,除非我需要檢查錯誤,如果有任何: pub f

    1熱度

    1回答

    我是Rust的新手,並且玩弄了一下。這是我的第一個程序,看起來我已經遇到了可怕的借用檢查器。 :) pub struct Foo<T> { memory: Vec<T> } impl<T> Foo<T> { { pub fn set(&mut self, value: T) { self.memory.push(value); } pub

    7熱度

    1回答

    我試圖使用嵌套迭代器,其中內部迭代器使用來自外部迭代器的值。 vec![0;10].iter().flat_map(|&a| { (0..10).map(|b|{ a + b }) }); error: a does not live long enough (0..10).map(|b|{ ^^^ note: reference must