Вопросы по теме 'trait-objects'

Как передать Rc ‹RefCell‹ Box ‹MyStruct› ›› в функцию, принимающую Rc ‹RefCell‹ Box ‹dyn MyTrait ›››?
Первоначально я задавал этот вопрос здесь , но он был отмечен как повторяющийся , хотя, на мой взгляд, он дублирует только его часть, поэтому я создал более конкретный: Рассмотрим следующий код: use std::rc::Rc; trait MyTrait { fn...
2263 просмотров
schedule 14.07.2022

Функция, возвращающая замыкание, не работает внутри моего фильтра
Я не могу заставить это скомпилировать без использования закрытия. Я пытаюсь заставить функцию apply возвращать правильный тип закрытия в первую очередь. #![feature(conservative_impl_trait)] #![allow(dead_code)] fn accumulate<'a>(tuples:...
2790 просмотров
schedule 29.06.2023

Сопоставить руки, возвращающие итераторы?
У меня есть код, который пытается выполнить сопоставление, где каждая ветвь может возвращать другой тип, но все эти типы реализуют Iterator<Item=usize> . let found: Iterator<Item = usize> = match requirements { Requirements::A...
607 просмотров
schedule 31.03.2024

В чем разница между ‹T: Trait› Box ‹T› и & Trait / Box ‹Trait›?
При написании кода с трейтами вы можете поместить трейт в привязку трейта: use std::fmt::Debug; fn myfunction1<T: Debug>(v: Box<T>) { println!("{:?}", v); } fn myfunction2<T: Debug>(v: &T) { println!("{:?}", v); }...
833 просмотров
schedule 26.06.2023

Разница между &mut и ref mut для трейт-объектов
Прежде всего, я не спрашиваю, в чем разница между &mut и ref mut как таковыми. Спрашиваю, потому что подумал: let ref mut a = MyStruct такой же как let a = &mut MyStruct Рассмотрим возврат трейт-объекта из функции. Вы...
1369 просмотров
schedule 11.03.2023

Как использовать трейт-объект в BinaryHeap?
У меня есть следующий упрощенный код: use std::collections::BinaryHeap; use std::rc::Rc; struct JobId; struct Coord; struct TimeStep; pub trait HasJob { fn id(&self) -> JobId; fn start(&self) -> Coord; fn end(&self)...
167 просмотров
schedule 25.05.2022

Как использовать нестатические типажные объекты со связанными типами?
У меня такой тип: struct Wrap<T>(Vec<T>); Я хочу реализовать std::ops::Index и возвращать ссылки на объекты признаков. Это была моя первая попытка ( площадка ): use std::ops::Index; use std::fmt::Display; impl<T>...
543 просмотров

Почему нельзя вызвать функцию для объекта-признака, если она ограничена параметром Self: Sized?
У меня такой код: trait Bar { fn baz(&self, arg: impl AsRef<str>) where Self: Sized; } struct Foo; impl Bar for Foo { fn baz(&self, arg: impl AsRef<str>) {} } fn main() { let boxed: Box<dyn Bar>...
2319 просмотров
schedule 12.09.2022

Ожидаемый трейт A, найденный &A при попытке упаковать трейт-объект
Я пытаюсь создать трейт, который может либо извлекать (и возвращать ссылку) объект трейта другого трейта, либо создавать его (и возвращать его коробочную версию), оставляя выбор разработчику (что означает, что мне нужно чтобы ограничить время жизни...
594 просмотров
schedule 19.06.2022

Смущен временем жизни Box‹Trait› в структуре
struct Wrap<'a> { pub data: Option<&'a i32>, } pub trait Boxable { fn get_data(&self) -> Option<&i32>; } impl<'a> Boxable for Wrap<'a> { fn get_data(&self) -> Option<&i32> {...
65 просмотров
schedule 12.06.2022

указатель функции против объекта типажа Fn
fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { // definition f(arg) + f(arg) } do_twice(|x| x + 1, 5) // call Эта функция принимает как замыкания, так и указатели на функции. Он принимает указатель на функцию в качестве типа...
2439 просмотров
schedule 15.10.2022

Какие контейнеры Rust 1.2 поддерживают трейт-объекты?
В руководстве Rust Edition говорится, что в Rust 1.2 дополнительные типы контейнеров поддерживают типы объектов . Он привел пример Rc<T> , но не дал полного списка. Какие еще контейнеры поддерживают трейт-объекты в Rust 1.2+?
148 просмотров
schedule 02.02.2024

Как преобразовать черту в конкретный тип?
У меня есть трейт-объект, и я хочу знать конкретный объект, на который он указывает, но я не могу понять, как получить этот конкретный объект. Я хочу что-то вроде следующего: trait MyClonable { /** copy from another MyClonable */ fn...
306 просмотров
schedule 25.05.2022

Почему значение не преобразуется в типаж-объект с динамической отправкой в ​​закрытии?
Учитывая следующий код: use std::iter::Iterator; trait Sequence { type SeqType: Iterator<Item = u32>; fn seq(&self) -> Option<Self::SeqType>; } struct Doubler<'a>(Option<&'a [u32]>); impl<'a>...
349 просмотров
schedule 24.12.2022

В чем разница между `& Trait` и` & impl Trait`?
struct SA { sa: u32, } trait T1 { // fn action_static() -> bool { // true // } fn action_ins(&self) -> bool { true } } impl T1 for SA {} fn do_action_1(x: &T1) { x.action_ins(); } fn...
105 просмотров
schedule 27.04.2023

временная стоимость упала при заимствовании с закрытием захвата
Рассмотрим следующий пример ( детская площадка ): struct Animal<'a> { format: &'a dyn Fn() -> (), } impl <'a>Animal<'a> { pub fn set_formatter(&mut self, _fmt: &'a dyn Fn() -> ()) -> () {} // Getting...
94 просмотров

Утверждать равенство трейт-объектов?
Обычный макрос assert_eq! требует, чтобы PartialEq был реализован в структуре — у меня есть вектор трейт-объектов, Vec<Box<dyn Element>> , где Element — это трейт, требующий отладки, pub trait Element: std::fmt::Debug . Точно так же я...
71 просмотров
schedule 28.01.2023