Публикации по теме 'borrowing'


Заимствование и владение Rust
Руководство разработчика Rust с точки зрения Node.js с примерами Отправившись в захватывающее путешествие с Rust в нашей предыдущей статье, мы вернулись, чтобы углубиться в две основные концепции, отличающие Rust: заимствование и владение . Вы можете найти последнюю статью здесь: Погружение с головой в Rust: американские горки для разработчиков Node.js Прощание с JavaScript и знакомство с миром Rust giuseppealbrizio.medium.com Как..

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

Передача Vec‹String› как IntoIterator‹&'a str›
У меня есть функция, которая должна выбирать случайные слова из списка слов: pub fn random_words<'a, I, R>(rng: &mut R, n: usize, words: I) -> Vec<&'a str> where I: IntoIterator<Item = &'a str>, R:...
1010 просмотров
schedule 03.06.2023

Проблема заимствования Rust с методом получения в структуре
Я новичок в Rust, поэтому все еще пытаюсь привыкнуть к модели памяти языка. Поэтому я сталкиваюсь с ошибкой cannot move out of borrowed content. , когда создаю getter метод в структуре. Я не мог понять, почему это так, но, похоже, это связано с...
290 просмотров
schedule 01.12.2022

Невозможно заимствовать неизменяемый контент `Box` `**it` как изменяемый при переборе вектора с полиморфными признаками
Я решил сделать действительно простой игровой цикл, перебирая Vec трейтов. Поскольку размер признака неизвестен, мне нужно использовать Box или ссылку для достижения этого полиморфного подхода. Мой подход может быть неправильным для достижения...
59 просмотров

schedule 15.07.2023

Заимствованное значение не живет достаточно долго при добавлении в бинарное дерево, построенное на RefCell
Я попытался реализовать операцию add в двоичном дереве: use std::cell::RefCell; use std::cmp::PartialOrd; type Link<T> = RefCell<Option<Box<Node<T>>>>; struct Node<T> { key: T, left: Link<T>,...
323 просмотров
schedule 02.08.2023

Как построить гибкую систему данных нескольких типов в Rust без клонирования строк?
Я хочу построить систему, в которой данные разных типов ( i32 , String ,...) передаются между функциями, которые изменяют данные. Например, я хочу иметь функцию add , которая получает «некоторые» данные и добавляет их. Функция add получает...
524 просмотров

Почему Rust ожидает двойное заимствование (`&&'a mut T`)
Мой код выглядит следующим образом: pub enum Cache<'a, T> { Pending(&'a dyn FnOnce() -> T), Cached(T), } impl<'a, T> Cache<'a, T> { pub fn get(&self) -> &mut T { // This caches and borrows...
735 просмотров
schedule 14.06.2022

Как удалить первый элемент BTreeMap или HashMap, отвечающий условию?
Я хотел бы удалить (key, value) из упорядоченной хэш-карты в зависимости от некоторого свойства, касающегося значения. Я написал следующий минимальный пример: use std::collections::BTreeMap; pub fn remove_if42(map: &mut...
530 просмотров
schedule 26.01.2023

Как мне написать функцию ржавчины, которая может читать и записывать в кеш?
Исходное заявление о проблеме Я пытаюсь написать функцию, которая может как читать, так и писать из кеша, но я сталкиваюсь с проблемой, когда компилятор говорит, что я не могу одновременно и неизменяемо заимствовать кеш. Я прочитал...
453 просмотров
schedule 10.04.2022

Я хочу передать ссылку на вектор функции, затем изменить ее там и вернуть как вектор
Я хочу передать адрес вектора, который содержит значения i64 , функции в качестве аргумента, затем я хочу, чтобы моя функция изменила вектор в его исходном местоположении и вернула измененный вектор как i64 . Я попытался передать изменяемую...
62 просмотров
schedule 05.05.2022

Как использовать заимствованные данные Rust только для чтения несколькими потоками Java?
У меня есть структура Foo и FooRef , в которой есть ссылки на данные из Foo : struct Foo { /* ... */ } struct FooRef<'foo> { /* ... */ } impl Foo { pub fn create_ref<'a>(&'a self) -> FooRef<'a> { /* ... */ } }...
216 просмотров
schedule 12.01.2023

Реализация ленивой загрузки с помощью типа enum в Rust
В моем случае использования у меня есть большой список типов Layer , которые состоят из данных изображения и некоторых метаданных об изображении: extern crate image; type Img = image::ImageBuffer<image::Rgba<u8>, Vec<u8>>;...
240 просмотров
schedule 19.08.2022

Как вызвать метод во время итерации в Rust
Извините, если это очень просто. Я изучаю ржавчину и привыкаю к ​​странной системе заимствований. Обычно вы можете получить желаемое поведение, просто изменив синтаксис вызовов вашего метода, однако в этом случае, похоже, теперь есть способ. Вот...
155 просмотров
schedule 05.11.2022

Почему str в основном существует в заимствованной форме?
Вот как используется тип str : let hello = "Hello, world!"; // with an explicit type annotation let hello: &'static str = "Hello, world!"; let hello: str = "Hello, world!"; приводит к expected `str`, found `&str` Почему тип...
505 просмотров
schedule 06.09.2022

Могу ли я переназначить изменяемую ссылку на фрагмент собственному фрагменту?
Я реализую структуру, подобную стеку, где структура содержит изменяемую ссылку на срез. struct StackLike<'a, X> { data: &'a mut [X], } Я хотел бы иметь возможность вытащить последний элемент из этого стека, например:...
219 просмотров
schedule 11.12.2023

Понимание нелексического времени жизни при вызове функций, возвращающих ссылку
Следующая функция отлично работает с NLL fn main() { let mut x = 1i32; let mut y = &mut x; let z = &mut y; *y = 12; } Однако, если я заменю оператор let z = &mut y вызовом функции (которая в основном делает то...
64 просмотров
schedule 25.09.2022

Напротив свойства «Заимствовать» для типов копирования?
Я видел черту Borrow , используемую для определения функций, которые принимают как собственный тип, так и ссылку, например T или &T . Затем в функции вызывается метод borrow() для получения &T . Есть ли какая-то черта, которая...
135 просмотров
schedule 06.06.2022

Невозможно заимствовать TlsStream в RefCell как изменяемый
У меня есть структура, содержащая RefCell , обертывающую TlsStream<TcpStream> . Я протестировал замену TlsStream<IO> на i32 и смог изменить элемент структуры, но при использовании потока компилятор ошибается. Я получаю следующую...
35 просмотров

Проблема с возвратом libusb :: Device из функции - попытка вернуть значение, ссылающееся на данные, принадлежащие текущей функции
Я хочу взаимодействовать с USB-устройством, поэтому использую libusb . У меня есть функция, которая возвращает libusb::Device интересующего меня устройства: pub fn obtain_device() -> Device<'static> { let context: Context =...
40 просмотров
schedule 10.11.2022

Может ли Box перемещать свое содержимое, когда перемещается весь Box?
Если я Box::new возьму значение, возьму указатель на него (программа проверки заимствования не позволит взять ссылку, так как я собираюсь переместить поле), а затем переместлю Box , можно ли переместить значение (например, перераспределение)...
128 просмотров