ㅤ
Синонимов куча
Cat
tariff, всё верно
ㅤ
Я тоже долго думал, какое слово выбрать
ㅤ
Но это к электроэнергии норм подходит
Αλεχ
Прикольно
Αλεχ
Выглядит дико
Αλεχ
но возразить нечего
Αλεχ
надо привыкнуть)
ㅤ
Да, похоже на транслит
ㅤ
let masiv = vichislit_zoni_tariffov()
ㅤ
ㅤ
>non-ascii idents are not fully supported. (see issue #28979)
Cat
ㅤ
>unknown А почему не все типы выводятся плагином?
Cat
>unknown А почему не все типы выводятся плагином?
грубо говоря на этом этапе эти типы неизвестны
Cat
ну и видимо они поленились делать обход chain call'ов для определения типа
Denys
но обычно в очень простых случаях, если что то посложнее то я не видел что б работало
Αλεχ
>unknown А почему не все типы выводятся плагином?
потому что у них свой анализатор
Αλεχ
хочешь компиляторовский- юзай RLS
Rostyslav
Ребят, а как вызвать функцию на обьекте, который пушится в вектор? Этот обьект мутабельный, не Copy и клонировать нельзя.
Денис
а в чём проблема? у вектора есть методы, чтобы получить мутабельную ссылку на хранимые объекты
Tim
foo(vec.back()); vec.back().foo(); не катит?
Rostyslav
а в чём проблема? у вектора есть методы, чтобы получить мутабельную ссылку на хранимые объекты
Мм..Да, совсем не подумал, что его можно взять из вектора обратно. Правда придется с индексами поиграть, ну да ладно, это вариант.
Денис
ненене
Rostyslav
foo(vec.back()); vec.back().foo(); не катит?
Не понял, если честно.
Денис
брать его оттуда обратно не надо
Денис
просто скинь пример, где у тебя ругается компилятор
Tim
Не понял, если честно.
ну у вектора есть метод .back(), который возвращает ссылку на последний элемент. Если ты объект уже запушил и нужно запустить функцию на этом объекте, вот так это можно сделать. Возможно я не понял вопроса.
Tim
да, проще скинь код
Tim
http://en.cppreference.com/w/cpp/container/vector/back
Tim
а блин
Tim
))
Tim
перепутал с плюсовым чатом
Tim
в расте у векторов нет метода .back() или ему подобного? О_о
Rostyslav
Ну, есть pop и можно peek сделать
Denys
он у итератопа есть
Anonymous
У слайса есть last(). А вектор к нему дерефается.
Rostyslav
pub fn nodes_mut(&mut self) -> Vec<&mut TreeNode<T>> { let mut all_nodes = vec![self]; for node in self.get_mut_children().iter_mut() { let node_children = node.get_children().clone(); all_nodes.push(node); if !node_children.is_empty() { let mut inner_nodes = node.nodes_mut(); all_nodes.append(&mut inner_nodes); } } all_nodes }
Rostyslav
Вот тут 1) self.get_mut_children()
Rostyslav
И вот тут 2) node.nodes_mut();
Rostyslav
Вот тут я уже типа зафиксил !node_children.is_empty()
Rostyslav
У меня есть аналогичный метод, для иммутабл, работает отлично: pub fn nodes<'a>(&'a self, parent_node: &'a TreeNode<T>) -> Vec<&'a TreeNode<T>> { let mut all_nodes = vec![parent_node]; for node in parent_node.get_children().iter() { all_nodes.push(node); if !node.get_children().is_empty() { let inner_nodes = self.nodes(node); all_nodes.extend(inner_nodes.iter()); } } all_nodes }
Rostyslav
Вот его, по сути, и нужно переработать под Vec<&mut TreeNode<T»
Rostyslav
error[E0382]: use of moved value: `*self` --> src\tree_node.rs:42:21 | 41 | let mut all_nodes = vec![self]; | ---- value moved here 42 | for node in self.get_mut_children().iter_mut() { | ^^^^ value used here after move | = note: move occurs because `self` has type `&mut tree_node::TreeNode<T>`, which does not implement the `Copy` trait error[E0499]: cannot borrow `*node` as mutable more than once at a time --> src\tree_node.rs:46:39 | 44 | all_nodes.push(node); | ---- first mutable borrow occurs here 45 | if !node_children.is_empty() { 46 | let mut inner_nodes = node.nodes_mut(); | ^^^^ second mutable borrow occurs here ... 49 | } | - first borrow ends here
Денис
ну вот тебе компилятор говорит
Денис
что ты смувал self
Денис
всё, забудь о нём после этого
Rostyslav
То есть, по сути банальный юз, после мува
Rostyslav
Ну я понимаю, а мне нужно на нём метод вызвать
պլհկ
all_nodes[0].метод
պլհկ
зачем было мувать-то сразу?
Rostyslav
all_nodes[0].метод
Да, вот, спасибо, а то я чёт с поп подумал делать
Денис
просто запуш его в конце
Rostyslav
зачем было мувать-то сразу?
А как?Ссылку кидать?
Rostyslav
Да, спасибо за ответы, всё было просто, как обычно)
Денис
кстати, ты там клонируешь node.get_children(), а потом не используешь, просто чтобы проверить, что там чё-то есть. не надо так :)
Rostyslav
А как переделать?
Rostyslav
И почему не надо так?
Rostyslav
Я просто для проверки склонировал, а оригинал пушнул
Денис
ну вот просто сразу решение в лоб — bool is_empty = node.get_children().is_emty();
Rostyslav
А, ну ок, я понял. Спасибо.
Denys
Denys
вторая ошибка бороу чекера, не?
Денис
да, но это другое :) я думаю эту ошибку он решит аналогичным образом, то есть через [0]
Денис
ну или не через ноль, а через .last_mut()
Денис
чё там больше подходит, мне лень думать)
Rostyslav
Теперь правда на лайфтаймы ругается, ну это ладно, я думаю справлюсь
Денис
они тебе там кстати не нужны, по крайней мере при таком синтаксисе
Денис
хотя может и нужно
Rostyslav
Где именно? Тут? pub fn nodes<'a😠&'a self, parent_node: &'a TreeNode<T>) -> Vec<&'a TreeNode<T»
Денис
(юзай ` для форматирования кода к телеграмме)
Rostyslav
Ок) pub fn nodes<'a😠&'a self, parent_node: &'a TreeNode<T>) -> Vec<&'a TreeNode<T>>
պլհկ
помогло!
Rostyslav
Ага:D
Денис
(а ещё в тг можно редактировать сообщения)
Denys
(и отвечать на сообщения)