Публикации по теме '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
24.04.2024
Когда возвращается неизменная ссылка на изменяемую ссылку на значение за пределами области действия, почему изменяемая ссылка удаляется при завершении области?
fn main() {
// block1: fails
{
let mut m = 10;
let n = {
let b = &&mut m;
&**b // just returning b fails
};
println!("{:?}", n);
}
// block2: passes
{...
313 просмотров
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 просмотров
schedule
16.03.2023
Почему 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 просмотров
schedule
30.09.2022
Проблема с возвратом 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 просмотров
schedule
15.09.2022