Vladislav
Shub
если штатные enums не подходят
Shub
type MyEnum = Start=0 | Middle=1 | End=2 чем не подходит?
Vladislav
https://github.com/fsbolero/Bolero он здесь
Vladislav
@ijsgaus https://www.youtube.com/playlist?list=PLtWrKx3nUGBfx-TBNymPp3WSpeHp7vxj9
Крылатый
Ня же!)
x
type MyEnum = Start=0 | Middle=1 | End=2 чем не подходит?
А как по нему матчиться потом?
x
Тупля :)
Наверное нет, потому что кол-во вариантов может быть переменным?
x
Или да...
x
Как уже написали выше,Set<'du>
Наверное это, но как матчиться? Сортировать порядок всегда?
x
Флэгзы это всё позволяют, но приходится писать уродские if с проверками hasFlag, а хочется декларативности и матчинга
Pavel
match x with | ALL (A ||| B ||| C) x -> ... | ANY (B ||| C) x -> ... | NONEOF (A ||| C) x -> ...
x
А, ок, вроде что-то годное. Пойду опять всех обрадую что в сишарпе счастья не будет 🤷‍♂️😀😀
x
Зачёл доку https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/active-patterns
x
Там как-то непохоже
x
Нет этих тройных палок
Ayrat
Нет этих тройных палок
Тройная палка это битовая операция. Двойная это или. Ну в общем тоже битовая но проще думать про нее как ИЛИ.
Ayrat
Тройная это ексклюзив ор вроде.
Ayrat
Но это неточно, я ими не пользовался давно
Nikolay
Прорамисты нужны?
Анна
Как те тушканчики за пол-ореха из комиксов
Aleksandr
200*8*25=40000
Aleksandr
Это сильно выше минимальной зп, кто бы что ни говорил
Aleksandr
Ну и от региона зависит
Aleksandr
Хотя 25 дней это перебор, я обсчитался
Крылатый
Доброе утро, товарищи фшарперы!
Крылатый
Ну и от региона зависит
Ну да. Он может быть девушкой из Карелии с трудовой неделей в 36 часов.)
Vasiliy
😂
Nikolay
200*8*25=40000
200*8*21=33600
Nikolay
Прорамист рассказывает про рамы? 🤔
Aleksandr
Очевидно я взял то, количество дней, которое удобнее посчитать))
Nikolay
Я бы за 200 рублей в час с удовольствием рассказывал про рамы
Nikolay
а про какие?
Ну про оконные могу
サイトー
ну это банально
サイトー
это и мама может
Vladislav
Элмиш пока выглядит охуенно @angmarr
Vladislav
Правда я день втыкал чзх происходит
Andrew
Раз 10 пересматривал рисуночки в их документации
Shub
А как по нему матчиться потом?
как обычно, сопоставление по образцу работает и с конкретными значениями же
Shub
Нет этих тройных палок
это детские комплексы разработчиков одного языка из одной компании
x
?
Pavel
А можно тут про синтаксис пояснить?
можно так type MyEnum = Start = 1 | Middle = 2 | End = 4 let inline (|ALL|_|) mask x = if mask &&& x = mask then Some x else None let inline (|ANY|_|) mask x = if mask &&& x > x ^^^ x then Some x else None let inline (|NONE|_|) mask x = if mask &&& x = x ^^^ x then Some x else None let isStartOrMiddle (x : MyEnum) = let ms = MyEnum.Middle ||| MyEnum.Start match x with | ANY ms _ -> true | _ -> false
Pavel
или так type MyEnum = Start = 1 | Middle = 2 | End = 4 let inline (|ON|_|) mask x = if mask &&& x = mask then Some x else None let inline (|OFF|_|) mask x = if mask &&& x = x ^^^ x then Some x else None let isStartOrMiddle (x : MyEnum) = match x with | ON MyEnum.Start _ | ON MyEnum.Middle _ -> true | _ -> false let isStartAndMiddle (x : MyEnum) = match x with | ON MyEnum.Start (ON MyEnum.Middle _) -> true | _ -> false
Hog
какой-то лютый пипец... во что простые битовые флаги превратили...
Hog
ФП ради ФП
Pavel
ну ты тоже ченить предложи
Igor
Элмиш пока выглядит охуенно @angmarr
Это да, не зря он даже в purescript есть (pux). НО с самое интересное начинаются, когда навигацию надо делать 😏
Pavel
выше если что это примеры использования активных патернов
Hog
я вчера ж предложил. если уж так хочется избавиться от флагов - Set<'DU>
Igor
Пукан горит?
Да уже потух. Просто изначально непривычно и многословно. Хочется обощить этот бойлерплейт в отдельную библиотечку (у меня пока не получилось).
Igor
В принципе мне в приложение нужно только - стек (push/pop для окон) - и табы
Hog
Ну у меня блейзор под капотом. Мб проблем не будет
казалось бы - что может пойти не так? :)
x
Ужасно же? Трижды дернуть contains чтоб проверить три флага
x
По сути тот же hasFlag
Hog
там не надо трижды - для ALL будет IsSubsetOf
Hog
для ANY... тоже можно что-нить придумать :))))
Vasily
Для any как раз tryFilter
Hog
что тут мы с Василием пытаемся донести... there's more than one way to do it
Hog
если эти флаги нужно пихуить ещё в 10 (полу)нативных апи, тогда без них не обойтись
Hog
если это просто опции для внутренней хрени - то сет - вполне себе замена
x
Я б хотел что-то в этом стиле (псевдокод) Match flags with |(flags.yellow, flags.green) => один кейс |(flags.red, flags.brown, flags.red) => второй кейс |(flags.red) => третий кейс |(flags.red, flags.blue) => четвертый кейс |_ => ничо не подошло кейс
Hog
т.е. тут у тебя ALL в любом случае
Vasily
Ну актив паттерны
Vasily
Скорее всего
Hog
|(flags.red) => третий кейс |(flags.red, flags.blue) => четвертый кейс вот для сетов порядок будет решающим