Описание тега borrowing

Заимствование - ключевая концепция в Rust: объект заимствования может использоваться заемщиком, но его право собственности не передается. В других языках эквивалент "взятие по ссылке".
0 ответов

Почему заимствования не допускаются в аргументе изменяемой функции

Название, вероятно, немного сбивает с толку, я имею в виду, что когда я пытаюсь скомпилировать: if folder_file_paths.len() > compressed_data.len() { compressed_data.reserve(folder_file_paths.len() - compressed_data.len() ); } Я получаю эту ошибку…
31 май '18 в 09:44
2 ответа

В чем разница между `Some(&a) => a` и`Some(a) => *a` при сопоставлении с Option?

Почему это проходит: fn f(v: Vec<isize>) -> (Vec<isize>, isize) { match v.get(0) { Some(&a) => (v, a), _ => (v, 0) } } Детская площадка но это не так fn f(v: Vec<isize>) -> (Vec<isize>, isize) { match v.get(0)…
26 июн '18 в 13:51
1 ответ

Проблема заимствования ржавчины с помощью метода get для структуры

Я новичок в Rust, поэтому все еще пытаюсь привыкнуть к языковой модели памяти. Итак, я сталкиваюсь с ошибкой cannot move out of borrowed content. когда я строю getter метод по структуре. Я не мог понять, почему это так, но, похоже, это связано с нек…
08 май '17 в 06:54
1 ответ

Реализовать древовидную структуру данных

Я хочу реализовать древовидную структуру данных. у меня есть Node структура и хотите, чтобы он содержал ссылки на ребенка Nodes. Я старался: use std::collections::*; #[derive(Debug)] struct Node { value: String, children: HashMap<String, Node>…
02 апр '17 в 15:31
0 ответов

Полностью заимствуя два поля закрепленной структуры

Я пытаюсь сделать асинхронную версию BufReader и Lines struct, но у меня проблемы, потому что мне нужно позаимствовать два поля одновременно. Работает без Pinпотому что компилятор может распознавать непосредственно заимствование полей, но он не може…
09 дек '18 в 23:40
1 ответ

Инициализация массива изменяемой ссылки на структуру

Я имею struct Board который содержит элемент rows: [[&'a mut Tile; 7];7] Я понятия не имею, как инициализировать это с помощью конструктора в impl Board {} блок из-за времени жизни, поэтому я попытался инициализировать его в main функция. К сожа…
15 дек '18 в 01:11
1 ответ

Как использовать значение, которым владеет оператор соответствия в Rust?

Мое намерение состоит в том, чтобы соответствовать значению каждой строки в текстовом файле. Если значение соответствует строке, соответствующий код операции должен быть помещен в вектор. В противном случае я хочу добавить само значение в вектор. Са…
16 дек '18 в 10:47
4 ответа

Обмен двух локальных ссылок приводит к пожизненной ошибке

У меня есть две переменные типа &T, x а также y, который я поменяю локально внутри функции: pub fn foo<T: Copy>(mut x: &T) { let y_owned = *x; let mut y = &y_owned; for _ in 0..10 { do_work(x, y); std::mem::swap(&mut x, &mu…
18 дек '18 в 14:56
1 ответ

Почему компилятор не допустил ошибку при этом изменяемом заимствовании, когда в области действия остается неизменная зарезервированная ссылка на фрагмент строки?

Я изучаю Rust из книгиThe Rust Programming Language, доступной в No Starch Press, но столкнулся с проблемой, из-за которой компилятор не вел себя так, как описано в книге в главе 4 на с. 77. Глава 4 книги обсуждает право собственности, а пример на с…
28 дек '18 в 05:29
1 ответ

Что позволяет неявное преобразование из структуры в ее ссылку при вызове метода?

По какому правилу работает следующий код? struct Dummy(i32); impl Dummy { pub fn borrow(&self) { println!("{}", self.0); } } fn main() { let d = Dummy(1); (&d).borrow(); d.borrow(); } Я жду d.borrow() не будет работать, как он проходит в sel…
13 янв '19 в 08:04
2 ответа

Как скопировать вместо заимствования i64 в замыкание в Rust?

У меня есть следующий минимальный пример моего кода: fn main() { let names : Vec<Vec<String>> = vec![ vec!["Foo1".to_string(), "Foo2".to_string()], vec!["Bar1".to_string(), "Bar2".to_string()] ]; let ids : Vec<i64> = vec![10, 20]; …
21 янв '19 в 10:15
0 ответов

Занимать элементы mut в векторе

Я пытаюсь воспроизвести следующий код Go в Rust: func (s *State) GetTargets() []*wrestler.Wrestler { targets := make([]*wrestler.Wrestler, len(s.Targets)) for i, n := range s.Targets { targets[i] = s.Players[n] } return targets } В Rust у меня есть …
04 авг '18 в 16:44
1 ответ

Как обернуть заемную стоимость в новый тип, который также является заемной стоимостью?

Я пытаюсь использовать шаблон нового типа, чтобы обернуть уже существующий тип. Этот внутренний тип имеет modify метод, который позволяет нам работать с заимствованным изменяемым значением в обратном вызове: struct Val; struct Inner(Val); impl Inner…
01 янв '19 в 22:59
2 ответа

Передать собственную ссылку на функцию содержащегося объекта

Я пытаюсь обмануть модель собственности Руста. Я пытаюсь передать ссылку на содержащий объект при вызове функции в структуре. Вот моя структура: pub struct Player {} impl Player { pub fn receive(self, app: &App) { } } Как вы видете, receive ожид…
29 апр '16 в 10:42
1 ответ

Почему заимствованный строковый литерал переживает своего владельца, притворяясь на всю жизнь?

Я понимаю, что заем не может пережить существование того, на что он указывает, чтобы искоренить висячие указатели. Заимствование или псевдоним могут пережить владельца, подделав время жизни: fn main() { let e; let first = "abcd"; { let second = "def…
09 янв '19 в 17:28
3 ответа

Разыменование строк и HashMaps в Rust

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

Невозможно вернуть вектор срезов строки: заимствованное значение не живет достаточно долго

Я новичок в Rust и у меня возникли проблемы с проверкой заимствований. Я не понимаю, почему этот код не скомпилируется. Извините, если это близко к ранее отвеченному вопросу, но я не могу найти решение в других вопросах, на которые я смотрел. Я пони…
10 авг '16 в 08:32
2 ответа

Складывание ссылок внутри совпадения приводит к пожизненной ошибке

Я хочу построить строку s перебирая вектор простых структур, добавляя различные строки к acc в зависимости от структуры. #[derive(Clone, Debug)] struct Point(Option<i32>, Option<i32>); impl Point { fn get_first(&self) -> Option&lt…
0 ответов

Каков наилучший подход для нескольких перекрестных ссылок в Rust?

Я конвертирую симуляцию Монте-Карло некоторых случайных геометрий из Python в Rust. Свобода, которую я имел в Python, позволила мне быть немного небрежным в отношении хранения ссылок на другие объекты по всему моему коду, но это кажется более хитрым…
01 авг '17 в 12:31
1 ответ

Элегантный способ заимствовать и вернуть изменчивую ссылку в Rust

Я пытаюсь вернуть изменчивую ссылку после выполнения какой-либо операции над ней. Это лучше всего объяснить фрагментом кода: #[derive(PartialEq)] pub enum Value { Null, Array(Vec<Value>), } impl Value { pub fn new() -> Value { Value::Array(…
29 июн '16 в 21:32