Alexander
Ведь такое можно сделать для SVec
Денис
для &SVec
Денис
это важно
Alexander
Да, именно.
Денис
на самом деле странно, что нет такого: IntoIterator for &'a CheeseSlice<'a>
Alexander
Вот да, я именно в поисках его и вглядывался в код soa
Alexander
Соответственно и хз что делать.
Денис
ну, можно так делать:
foobar(&vec);
let slice = vec.as_slice();
foobar(slice.iter());
foobar(slice.iter());
Alexander
Но опять же это делать за пределами трейта тогда надо руками всё время, что неудобно.
Денис
я думаю есть причина, по которой создатели soa-derive не запилили IntoIterator для &...Slice
Alexander
https://github.com/inv2004/test_lifetimes/blob/master/src/main.rs
Alexander
Денис
обычно трудности бывают связаны с тем, что хочешь странного
Денис
наверное было бы проще, если бы ты сформулировал конечную задачу, потому что пока ты хочешь какой-то супер-мега-абстракции =)))
Alexander
Да, но пока не видно что не так в данный момент.
Alexander
Задача проста - есть структура с векторамт, хочу по ним интегрироваться и не писать бойлерплейт типа izip с кучей полей. + Есть вектора лежащие отдельно - те структура слайсов - я хочу их аналогично.
Денис
у тебя и вектор, и слайсы, уже всё имплементируют же
Alexander
Пока вроде ничего поотеворечтвого с ходу не вижу в том чего хочу :)
Денис
берёшь и делаешь .into_iter().map() или что там угодно
Денис
какой бойлерплейт блин)
Alexander
У меня структура которая итерирует и делает что надо : Pl в моём коде.
Alexander
Alexander
Pl - Player
Денис
у тебя принтскрин сломан?)))))
Alexander
У меня рабочая машина не имеет доступа в телеграм.
Денис
эх
Денис
даже веб-клиент?
Денис
ну лан
Alexander
Alexander
Денис
короче мой поинт такой, что Pl — не нужна, по крайней мере в том виде, что есть сейчас, потому что это просто лишний слой абстракции, который и так уже предоставляется итераторами
Alexander
Нуу, надо подумать.
Денис
Денис
AB-problem, вот это вот всё )
Денис
ну, имхо конечно
Alexander
Но если б был intoiter для &'sslice, то проблем бы не было. А почему его нет - хз
Денис
ну кроме того что у тебя уже супер-сложный код для такой простой задачи)
Alexander
У меня в плеере как минимум ещё одна структура хранится. Конечно вероятно как-то можно извернуться. Но сейчас все вообще изи в бинарнике структура::new или new_slice. А дальше просто .play или each в данном случае. А иначе - итераторами наружу.
Alexander
Т.е. очевидно вариант из new* возвращать просто SVec и SSlice и ходить по ним руками. Но получается что надо писать два разных обхода, и в одну функцию их не реализуешь - вот бойлерплейт получается кажется.
Денис
мне кажется, я помогаю тебе идти неправильным путём
Денис
но
Денис
impl<'a> IntoIterator for &'a CheeseSlice<'a> {
type Item = CheeseRef<'a>;
type IntoIter = __detail_iter_cheese::Iter<'a>;
fn into_iter(self) -> __detail_iter_cheese::Iter<'a> {
self.iter()
}
}
Денис
даже наверное так лучше сделать объявление: fn into_iter(self) -> Self::IntoIter
Денис
https://gist.github.com/mexus/e9b70ac9c7b51878c7d00ec37a448a79
Денис
хотя чем &slice лучше slice.iter() я всё равно не понимаю
Alexander
Ну тем что можно одинаково дёргать как и &vec
Денис
ну что значит одинакого
Денис
ты всё равно пишешь этот значок
Денис
и там, и там
Денис
и это разные типы
Alexander
Да, спасибо, я как раз в эту сторону копал сейчас, но я так быстро не умею :)
Денис
не за что, это очень простая имплементация + __detail_iter_cheese::Iter — вот это жесть конечно
Alexander
Но я же в конструктор .iter не могу передать.
Денис
но это разумеется надо добавлять в кодогенератор
Денис
что?)
Alexander
Ну, может я не понял, сорян, но в твоём примере да - ты руками дергаешь всё - iter не проблема.
Alexander
А у меня выше в коде там конструкторы - как там iter применить я что-то не соображу.
Денис
твой трейт вообще выглядит супер-странно
Денис
в нём по идее только fn test(&self) -> f32; должна быть, и всё
Денис
а уж как конструируют его экземляры — это-то пофигу же
Alexander
Изначально были отдельные трейты, и в одним был только test. но я слил в один. Подумав, что почему бы и нет.
Нави
можете подсказать, как мне суметь использовать обращение к функции с разным количеством аргументов?
https://play.rust-lang.org/?gist=141ee235d624f5b9fb10672fe3e1a6e9&version=stable
Денис
@NaviArh это просто — никак :) в расте нет function overloading
Alexander
Вроде как оффициальная рекомендация - разные названия функций делать.
Денис
@inv2004 ну то есть класс Player у тебя должен уметь проигрывать пофигу что, так?
Денис
пофигу что, лишь бы это можно было каким-то образом итерировать и у этого что-то был бы метод test
Денис
ога
Alexander
Могу как бы больше написать. Будут разные структуры типа S1, S2, и ТД с разным набором полей.
Alexander
В обычном случае я описываю .new, которая там хитрым способом калькулирует S1Vec
Alexander
И потом я хочу по этому набору данных прогнать и получить результат - всё норм.
Alexander
Но иногда, для оптимизации подсчёта я использую одно из просчитанных полей старое, а перегенерб только для b например.
Alexander
И тут вот и пришлось слайсы делать, а как иначе.
Денис
пожалуйста не надо называть их S1 и S2...
Alexander
По сути что-то вроде оптимизации для gridsearch.
Денис
я понял, щас делаю прототип
Alexander
Alexander
я понял, щас делаю прототип
Но вообще спасибо, я думаю реализация и сейчас в общем-то норм. И все что надо протащить в soa это изменение.
Денис
кстати, а почему бы всегда не использовать только слайсы?