These are chat archives for dev-ua/rust

27th
Oct 2017
Andrii Nasinnyk
@anasinnyk
Oct 27 2017 14:36

Could you help me with some error

error[E0619]: the type of this value must be known in this context

about next code:

pub fn in_wallet_assets(&mut self, asset_list: Vec<Asset>) -> bool {
        let assets_from_wallet = self.assets().clone();

        !asset_list.into_iter().filter(move |a1| {
            let condition: bool = assets_from_wallet.into_iter()
                .filter(|a2| a2.hash_id() == a1.hash_id() && a2.amount() >= a1.amount())
                .collect()
                .is_empty();
            !condition
        }).collect().is_empty()
}
Vladimir Motylenko
@vldm
Oct 27 2017 14:39

collect() собирает итератор в коллекцию
Коллекция при этом может быть любая удовлетворяющая типа FromIterator.

тебе нужно указать в какой конкретно тип ты хочешь добавить. Т.е.
.collect::<Vec<_>>().is_empty()

например

Ну а еще правильнее - заменить конструкцию .filter(..).collect().is_empty()
на .any(...)
Andrii Nasinnyk
@anasinnyk
Oct 27 2017 14:42
Дякую. Ви мені дуже сильно допомогли!!!
Vladimir Motylenko
@vldm
Oct 27 2017 14:43
:smile: you are welcome
Andrii Nasinnyk
@anasinnyk
Oct 27 2017 16:12
Можливо зможете ще мені допомогти.. у нас в коді є складний ветор з струкури у якої є hash та amount.
і на вхід нам приходить також ветор такої ж структури.
Потрібно відфільтрувати базовий вектор. і при співпадінні відняти емаунт.. потім видалити ті які мають 0.
зараз у нас це реалізовано страшними форами.. але я вірю що мають бути підходящі методи у раста
MAIN: [(id1, 10), (id2,  20), (id3,  30)]
INPUT: [(id1, 5), (id3, 30)]
EXPECTED: [(id1, 5), (id2, 20)]