ㅤ
Синонимов куча
Cat
tariff, всё верно
ㅤ
Я тоже долго думал, какое слово выбрать
ㅤ
Но это к электроэнергии норм подходит
Αλεχ
Прикольно
Αλεχ
Выглядит дико
Αλεχ
но возразить нечего
Αλεχ
надо привыкнуть)
ㅤ
Да, похоже на транслит
ㅤ
let masiv = vichislit_zoni_tariffov()
ㅤ
ㅤ
>non-ascii idents are not fully supported. (see issue #28979)
Cat
ㅤ
>unknown
А почему не все типы выводятся плагином?
Cat
Cat
ну и видимо они поленились делать обход chain call'ов для определения типа
Denys
Denys
но обычно в очень простых случаях, если что то посложнее то я не видел что б работало
Αλεχ
Αλεχ
хочешь компиляторовский- юзай RLS
Rostyslav
Ребят, а как вызвать функцию на обьекте, который пушится в вектор? Этот обьект мутабельный, не Copy и клонировать нельзя.
Денис
а в чём проблема? у вектора есть методы, чтобы получить мутабельную ссылку на хранимые объекты
Tim
foo(vec.back());
vec.back().foo();
не катит?
Денис
ненене
Rostyslav
Денис
брать его оттуда обратно не надо
Денис
просто скинь пример, где у тебя ругается компилятор
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
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
(и отвечать на сообщения)