Αλεχ
Например я могу сделать
Αλεχ
let arr = (0..100).map(|x| format!("Result: {}", x)).collect::HashSet<_>
Αλεχ
в шарпике как?
Αλεχ
не завезли метода? упс
Αλεχ
интерполяция разве что аккуратнее выглядит
Αλεχ
но и все
Αλεχ
тем более её не так давно завезли
Αλεχ
нужен срочно новый пример
в шарпиках хорошо то, что ты из Box<T> можешь достать конкретный тип обратно
Αλεχ
кстати альтернативно можно записать как let arr: Vec<_> = (0..100).map(|x| format!("Result: {}", x)).collect() если двоеточия не любишть
Αλεχ
инфа о типе лежит в объекте, а не в указателе
🐁 Arutrancetro
хорошо, а как в расте сделать такое: public class SomeClass { public event Action Completed; public void Run() { // Some code... Completed?.Invoke(); } } var obj = new SomeClass(); obj.Completed += () => { Console.WriteLine("Completed!"); }; obj.Run();
🐁 Arutrancetro
т.е. есть события на уровне языка? )
Αλεχ
события это просто делегаты
🐁 Arutrancetro
ну я понимаю
Cat
инфа о типе лежит в объекте, а не в указателе
ну так это тоже интроспекция по факту
🐁 Arutrancetro
это делегаты с ограничениями
Cat
то, что она сделана "из коробки" не отменяет того, что это рефлексия
Cat
т.е. есть события на уровне языка? )
также, как в других языках без vm
Αλεχ
это делегаты с ограничениями
событий нет, и для меня это плюс
Αλεχ
события это вообще устаревший подход
Αλεχ
можешь доклад MS почитать на эту тему
🐁 Arutrancetro
ну мб и устаревший, но очень удобный
Cat
а в каком контексте используются такие события?
Cat
(кроме UI)
🐁 Arutrancetro
это инкапсулирует логику класса
🐁 Arutrancetro
можно совсем в другом месте программы слушать события
🐁 Arutrancetro
и делать что угодно
Cat
каким образом?
Αλεχ
я бы написал public class SomeClass { public Task RunAsync() { // Some code... } } var obj = new SomeClass(); obj.RunAsync().ContinueWith(...)
Αλεχ
это ничем не хуже инкапсулирует
Αλεχ
зато без трешатни с событиями
Αλεχ
где я могу комбинаторы юзать с этим всем
Cat
кроме того, что этим пулом пропитывается рантайм и не нужно явно передавать pubsub как аргумент/whatever
Αλεχ
особых преимуществ над pubsub не вижу
события это pubsub на уровне языка
Cat
дада, я о том же
Αλεχ
единственное, когда это удобно - для UI десктопа
Αλεχ
в остальных случаях через них асихнронщину эмулируют
Αλεχ
и выглядит это как говно
Ευγένιος
Капец активные седня.
Cat
Капец активные седня.
ну человек набрасывает, мы ведёмся
🐁 Arutrancetro
хз, мне нравятся события =)
Αλεχ
Αλεχ
хз, мне нравятся события =)
ну вот ты накидал код
Αλεχ
я сразу вижу, что он хреновый
Αλεχ
например как сделать так, чтобы мы запустили 100 разных объектов
Αλεχ
дождались ответа у первого же
Αλεχ
а остальные отменили?
Ευγένιος
ну человек набрасывает, мы ведёмся
Дак этож круто. Но до гоферов нам далеко.
Ευγένιος
🐁 Arutrancetro
суть событий в том, что нельзя действовать на других слушателей
Αλεχ
они друг про друга не знают
Αλεχ
у тебя есть фабрика
Αλεχ
которая например пингует 1000 сайтов
Cat
суть событий в том, что нельзя действовать на других слушателей
в концепции pubsub это тоже очень просто реализуется
Αλεχ
пусть Run это Ping
Αλεχ
и ты хочешь пропинговать первый попавшисйся
Αλεχ
чтобы узнать есть ли интернет
Αλεχ
если есть то остальные пинги надо отменить
🐁 Arutrancetro
ну это немного другая задача
🐁 Arutrancetro
события не для этого)
🐁 Arutrancetro
события оповещают, когда где-то что-то произошло в программе
🐁 Arutrancetro
например, дисконнект
Berkus
если есть то остальные пинги надо отменить
если ты отправил 1000 пингов, то отменить их уже нельзя, извени
🐁 Arutrancetro
и в событии обработку делаешь
Cat
например, дисконнект
для этого существуют коллбэки со времён си
Αλεχ
та же самая
Αλεχ
например, дисконнект
принимаешь параметром Action<IDisconnectDetails>
Berkus
смотря на каком уровне
если они уже ушли с машины, то на любом
Αλεχ
я вот за последние года 3 ни 1 события не написал
Αλεχ
если они уже ушли с машины, то на любом
они могут физически уйти но мы не будем слушать ответа
Αλεχ
это уже неплохо