LINUX.ORG.RU

История изменений

Исправление 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
}