LINUX.ORG.RU

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

Исправление Zenom, (текущая версия) :

leftmost = Ref::map(children[0].borrow(), |n| &n);

Так не сработает. Тут тип результата Ref<RCTree>, а в &RCTree преобразуется только &Ref<RCTree>. Если же взять ссылку от этого выражения, то опять же, оно живёт только внутри цикла, а отдать мы её пытаемся наружу.

PS: компилятор в этом случае прав, ибо ссылка живёт в области видимости borrow(). Закончилась область - закончилась и ссылка. А вы ее куда-то еще отдаёте. Всё. Нет ёё уже.

Конечно прав. Я с компилятором не спорю, просто не могу найти способа выразить предлагаемую семантику в случае Rc<Ref<T>>

Исходная версия Zenom, :

leftmost = Ref::map(children[0].borrow(), |n| &n);

Так не сработает. Тут тип результата Ref<RCTree>, а в &RCTree преобразуется только Ref<RCTree>. Если же взять ссылку от этого выражения, то опять же, оно живёт только внутри цикла, а отдать мы её пытаемся наружу.

PS: компилятор в этом случае прав, ибо ссылка живёт в области видимости borrow(). Закончилась область - закончилась и ссылка. А вы ее куда-то еще отдаёте. Всё. Нет ёё уже.

Конечно прав. Я с компилятором не спорю, просто не могу найти способа выразить предлагаемую семантику в случае Rc<Ref<T>>