Rostyslav
Да ладно, хрен с этим, ибо лайфтаймы там таки нужны
Денис
@AtomicInteger давай ошибку-то уже =)
Rostyslav
@AtomicInteger давай ошибку-то уже =)
Держи:D
error[E0597]: `all_nodes` does not live long enough
--> src\tree_node.rs:42:21
|
42 | for node in all_nodes[0].get_mut_children().iter_mut() {
| ^^^^^^^^^ borrowed value does not live long enough
...
51 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the anonymous lifetime #1 defined on the method body at 40:5...
--> src\tree_node.rs:40:5
|
40 | / pub fn nodes_mut(&mut self) -> Vec<&mut TreeNode<T>> {
41 | | let mut all_nodes = vec![self];
42 | | for node in all_nodes[0].get_mut_children().iter_mut() {
43 | | let is_empty = node.get_children().is_empty();
... |
50 | | all_nodes
51 | | }
| |_____^
Денис
вот просто пальцем в небо, сделай for &node in all_nodes[...
Денис
может у тебя код целиком где-то выложен? у меня пока мозг не научился компилять раст :(
Rostyslav
Rostyslav
Rostyslav
Я его ещё не запушил банально, ибо не работает ничего))
Денис
пуш как есть)
Rostyslav
Ладно, сейчас. Кстати, с pop работает. есть вариант заюзать вместо вектора мой лист, там есть peek)
Rostyslav
пуш как есть)
https://github.com/AtomicInteger/one_more_dstruct/tree/trying
Denys
а разве все равно не будет проблемы с лайфтаймами?
Rostyslav
Denys
то есть ты делаешь peek, ну или last_mut то референс будет валиден только в этом скоупе, следовательно тебе не дадут вернуть твой вектор
Rostyslav
Ну да, да
Denys
изи вариант это клонить сразу)
Denys
но как то неоч оно, мб и можно как то это собрать
Rostyslav
Клонить очень не хочу, ибо мне потом нужно менять эти данные, вот и получится, что я клон меняю
Rostyslav
Там, если в коммитах глянуть, так и было раньше:)
Денис
Денис
у меня ни get_mut_children ни nodes_mut нет
Rostyslav
Ну ты ветки переключи
Rostyslav
https://github.com/AtomicInteger/one_more_dstruct/commit/85fe2354a86f2bc7868af5e96121b9f40b4acd7d
Rostyslav
Вот он, коммит
Rostyslav
А в мастер я завальный код не пушил:)
Денис
cargo check
Compiling one_more_dstruct v0.0.1 (file:///home/mexus/test/rust/one_more_dstruct)
Finished dev [unoptimized + debuginfo] target(s) in 0.23 secs
Rostyslav
Ты ветку точно переключил?
Денис
git log -1
commit 85fe2354a86f2bc7868af5e96121b9f40b4acd7d
Author: AtomicInteger <rostyk1@hotmail.com>
Date: Thu Apr 12 23:30:01 2018 +0300
Some fail code
Rostyslav
Ну да, верно
Rostyslav
Чёт я может не выспался, но у меня падает
Денис
какая версия?
Rostyslav
какая версия?
cargo?
cargo 1.26.0-nightly (d63299b6e 2018-03-28)
Денис
то же самое было
Денис
ща обновлю найтли на всякий :)
Денис
всё билдится, тесты проходят
Rostyslav
Но ты методы то видишь?Видишь же, что они хреновые?
Денис
nodes_mut есть, если добавляют туда АХАХАХА, билд фейлится)
Денис
pub fn nodes_mut(&mut self) -> Vec<&mut TreeNode<T>> {
let mut all_nodes = vec![self];
for node in all_nodes.pop().unwrap().get_mut_children().iter_mut() {
let is_empty = node.get_children().is_empty();
all_nodes.push(node);
if !is_empty {
let mut inner_nodes = all_nodes.pop().unwrap().nodes_mut();
all_nodes.append(&mut inner_nodes);
}
}
all_nodes
}
Denys
Так же, ты же знаешь что поп в формате цикле и внутри ифа по сути убрал оттуда Селф и ноду которую ты только запушил? Так fyi, мб так и нужно
Denys
Денис
@lundibundi у тебя тоже билд фейлится?
Rostyslav
Denys
Я кушать делаю) я не клонил я просто локально написал стабы с нужными фями которые unimplemented!
Denys
Мб ппже гляну
Денис
ща на другой машине попробую
Denys
Походу он не думает что файл не менялся
Денис
чот сомневаюсь)
Denys
Надо почистить кеш Билда я думаю
Денис
@AtomicInteger
git clone https://github.com/AtomicInteger/one_more_dstruct.git
git checkout trying
cargo check
cargo test
Денис
всё отработало окей
Denys
Гугл говорит что есть cargo clean
Denys
На крайняк попробуй удалить таргет если она есть
Денис
cargo clean по-моему именно это и делает)
Денис
strace подтверждает :)
Denys
)
Denys
Во магия
Rostyslav
И у меня не падает
Денис
Rostyslav
Как так то:D
Rostyslav
Может это и валидный код
Денис
собирается — значит валидный =)
Denys
Погоди ка, там же в коммите с поп код
Denys
Так он вроде ок)
Rostyslav
Ну да, я же с поп запушил, но иде подсветила красным, видмо не успело обновиться
Denys
Ты убираешь этот элемент который запушил из вектора
Rostyslav
В смысле, это неправильно?
Денис
pop() удаляет последний элемент из вектора — тебе так и нужно или нет? :)
Denys
Screenshot (Apr 13, 2018 00:01:39)
Rostyslav
На самом деле нет, иначе зачем я его пушу тогда. Если вы хотит сказать, что это ошибка, то да, так оно и есть. Это я уже просто как заглушку поставил.
Denys
Denys
Просто со стороны раста то все ок, а логически это ошибка вроде как, я потому и отписал)
Rostyslav
А, ну ок, я понял. Ну да, ошибка, но это я поправлю. Просто так оно хотя бы билдится.
Ладно, ребят, спасибо за помощь, дальше я уже сам буду копать
Rostyslav
Что-то слишком много времени отняла такая глупость:)
Антон
Денис
в общем
Денис
ничего не получится :)
Денис
нужно Rc использовать
Rostyslav
нужно Rc использовать
Вот, кстати, насчет Rc, Arc и Box я уже не раз думал, но так почему-то и не разобрался