всем полям, может создать враппер по факту, но проще будет сделать какой-то универсальный, аля: (писал в чате будет не работать)
struct Wrapper<T, F>{
inner: ReffCell<Option<T>>,
func: Option<F>
}
impl<T> Wrapper<T, ()> {
fn new<U: FnOnce() -> T>( func: U) -> Wrapper<T, U> {
Wrapper { inner ReffCell::new(None), Some(func)}
}
}
impl<T, F:FnOnce()> Deref for Wrapper<T, F> {
type Target = T
fn deref(&self) -> &T {
if let Some(ref b) = self.inner.borrow() {
&*b
}
else
{
*self.inner.borrow_mut() = Some((self.func.take()) ());
&*self.inner.borrow().unwrap()
}
}
}
Так a.j чем-то быть нужен.
Обсуждают сегодня