История изменений
Исправление
RazrFalcon,
(текущая версия)
:
Код не запускал, но как-то так:
use std::cell::Ref;
fn leftmost(&self) -> Ref<RCTree> {
let mut leftmost = self;
while let RCTree::Node(ref children) = *leftmost {
// &Ref<RCTree> coerces to &RCTree
leftmost = Ref::map(children[0].borrow(), |n| &n);
}
leftmost
}
PS: компилятор в этом случае прав, ибо ссылка живёт в области видимости borrow(). Закончилась область - закончилась и ссылка. А вы ее куда-то еще отдаёте. Всё. Нет ёё уже.
Исходная версия
RazrFalcon,
:
Код не запускал, но как-то так:
use std::cell::Ref;
fn leftmost(&self) -> Ref<RCTree> {
let mut leftmost = self;
while let RCTree::Node(ref children) = *leftmost {
// &Ref<RCTree> coerces to &RCTree
leftmost = Ref::map(children[0].borrow(), |n| &n);
}
leftmost
}