Я просто в этот глюк в очередной раз ударился: use std::cell::UnsafeCell; pub type Awaker<T> = fn(T); pub struct Mixin { pub i: i32 } struct Node<M> { pub mixins: M } impl<'a> Node<(fn(&'a Mixin), Mixin)> { pub fn call(&'a mut self) { self.mixins.1.i += 1; unsafe { (self.mixins.0)(&self.mixins.1); } } } fn main() { fn clos(mixin: &Mixin) { println!("{}", mixin.i); } let cell = UnsafeCell::new(clos); let mut child = Node { mixins: (clos as _, Mixin { i: 0 }) }; Node::call(&mut child); Node::call(&mut child); }
cell.get_mut?? cell.get ?? по коду cell вообще не используется, а потом откудато возникает clos, хотя его замувили в UnsafeCell...
с телефона долго но править.. https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=c6b40a45c0b1032499157e80de9c64b3
интересно... я похожее с самого начала вроде делал
Обсуждают сегодня