Вопросы по теме 'borrowing'

Заимствование T в Rc‹RefCell‹T››
Я пытаюсь сделать что-то вроде этого use std::cell::{RefCell,Ref,RefMut}; use std::rc::Rc; struct Entity; struct Tile { entity: Option<Rc<RefCell<Entity>>> } impl Tile { pub fn try_read_entity<'a>(&'a self)...
1074 просмотров
schedule 28.03.2023

Как я могу написать строитель, который хранит путь?
Аргумент Path можно было бы сразу преобразовать в PathBuf , но это кажется неэффективным. Должен же быть какой-то способ сохранить только Path , верно? use std::{fs::File, path::Path}; struct Foo { a: Option<File>, b:...
330 просмотров
schedule 20.11.2022

Мешают ли правила заимствования Rust функциональным структурам данных?
Функциональные структуры данных (такие как Hash Array Mapped Trie, используемая в Haskell/Clojure/Scala) основаны на большом количестве общего доступа к базовой структуре данных. Например, если мы реализуем insert для типа данных, подобного карте,...
1061 просмотров
schedule 22.06.2023

Как дублировать фрагмент &[u8]?
Как скопировать содержимое фрагмента &[u8] ? Я пытаюсь написать функцию, которая принимает буфер в качестве входных данных и выполняет XOR для каждого байта с заданным ключом и возвращает окончательный результат. Я не хочу, чтобы он искажал...
4104 просмотров
schedule 11.11.2022

Как клонировать последний элемент из изменяемого вектора, а затем передать значение вектору в Rust?
Как клонировать последний элемент из изменяемого вектора, а затем передать значение в вектор в Rust? fn ElementsFromPoint(&self, ...) -> Vec<Root<Element>> { let mut elements: Vec<Root<Element>> =...
242 просмотров
schedule 08.11.2023

Как мне реструктурировать код графа, чтобы избежать ошибки «Невозможно заимствовать переменную» как изменяемой более одного раза?
У меня есть простой график, который успешно компилируется: use std::collections::HashMap; type Key = usize; type Weight = usize; #[derive(Debug)] pub struct Node<T> { key: Key, value: T, } impl<T> Node<T> { fn...
446 просмотров
schedule 29.03.2023

Циклическая ссылка RefCell заимствует при обходе
Я изучаю Rust и пробовал написать двусвязный список. Однако я уже застрял на типичной реализации итеративного обхода. У меня сложилось впечатление, что средство проверки заимствований / проверки перетаскивания слишком строгое и не может сделать...
352 просмотров

Разыменование строк и HashMaps в Rust
Я пытаюсь понять, как HashMaps работают в Rust, и я придумал этот пример. use std::collections::HashMap; fn main() { let mut roman2number: HashMap<&'static str, i32> = HashMap::new(); roman2number.insert("X", 10);...
5853 просмотров
schedule 21.12.2022

Как сделать изменяемый указатель на поле узла дерева и изменить его?
Я хочу найти какой-то узел в дереве и мне нужен указатель на контейнер узлов: &mut Vec<Node> struct Node { c: Vec<Node>, v: i32, } impl Node { pub fn new(u: i32, n: Node) -> Node { let mut no = Node {...
316 просмотров
schedule 05.06.2023

Несколько владельцев для элементов списка Rust (владелец списка и несколько рефереров) - возможно?
У нас есть структура с LinkedList : struct XPipeline { handlers: LinkedList<XHandler>, } XPipeline является владельцем всех XHandler объектов и может обращаться к ним и изменять их. У нас уже есть список обработчиков;...
832 просмотров

Невозможно вернуть вектор фрагментов строки: заимствованное значение не живет достаточно долго
Я новичок в Rust, и у меня проблемы с программой проверки заимствований. Я не понимаю, почему этот код не компилируется. Извините, если это близко к ранее отвеченному вопросу, но я не могу найти решение по другим вопросам, на которые я смотрел. Я...
1458 просмотров
schedule 30.07.2023

Несколько самостоятельных займов
Я изучаю Rust и пытаюсь написать простой лексер. У меня есть функция next_token в блоке impl , которая считывает следующий токен из итератора входных символов. Однако код не будет собран из-за многократного заимствования self. Как мне обойти...
143 просмотров
schedule 20.06.2023

Почему трейты для перегрузки операторов требуют владения собой?
Почему я не могу просто использовать &self в признаке Add : pub trait Add<RHS = Self> { type Output; fn add(self, rhs: RHS) -> Self::Output; } Таким образом, мне не нужно беспокоиться о перемещении моей структуры после...
44 просмотров
schedule 14.07.2022

Как несколько потоков могут совместно использовать итератор?
Я работал над функцией, которая будет копировать кучу файлов из источника в место назначения, используя Rust и потоки. У меня возникают проблемы с тем, чтобы потоки использовали итератор. Я до сих пор не привык к системе заимствований: extern...
1675 просмотров
schedule 03.07.2022

Как изменить заимствованный HashMap после возврата одной ветки из функции?
Я попытался упростить свою программу, но ошибки не возникает, если я использую простой HashMap<u16, u16> вместо вложенного класса HashMap Polynome . Вам понадобятся эти импорты, чтобы воспроизвести проблему: use...
50 просмотров
schedule 14.04.2023

Как я могу исправить эти два цикла for, чтобы разрешить изменение векторного содержимого?
Я пытаюсь сделать цикл по матрице, созданной с использованием Vec<f64> внутри Vec, а затем изменить ее элементы один за другим. Я не могу заставить его работать; Я все еще слишком запутался в синтаксисе... extern crate rand; use...
170 просмотров
schedule 06.04.2023

Невозможно заимствовать из RefCell‹FnMut›
У меня проблема с фрагментом кода, и я не понимаю, в чем проблема use std::rc::Rc; use std::cell::RefCell; struct Order { id: u64, } fn main() { respond( Order { id: 0 }, Rc::new(RefCell::new(|ord| { ord;...
115 просмотров
schedule 14.10.2022

Перебор рекурсивной структуры с использованием изменяемых ссылок и возвращение последней действительной ссылки
Я пытаюсь выполнить рекурсию вниз по структуре узлов, модифицируя их, а затем возвращаю последний Node , до которого добрался. Я решил проблемы с изменяемыми ссылками в цикле, используя пример в нелексическом RFC . Если я попытаюсь вернуть...
543 просмотров
schedule 14.10.2022

Почему строки из записей csv::Reader не живут достаточно долго при вставке в HashMap?
Я новичок в концепции всей жизни Rust. Я пытаюсь прочитать некоторые данные из файлов CSV и поместить их в HashMap : extern crate csv; use std::collections::HashMap; fn main() { let files = vec!["file1.csv", "file2.csv", "file3.csv"];...
135 просмотров
schedule 30.03.2023

Почему заимствования не разрешены в аргументе изменяемой функции
Название, вероятно, немного сбивает с толку, я имею в виду, что когда я пытаюсь скомпилировать: if folder_file_paths.len() > compressed_data.len() { compressed_data.reserve(folder_file_paths.len() - compressed_data.len() ); } Я получаю...
37 просмотров
schedule 21.02.2024