Vladislav
Shub
Shub
если штатные enums не подходят
Shub
type MyEnum = Start=0 | Middle=1 | End=2 чем не подходит?
Igor
Vladislav
https://github.com/fsbolero/Bolero
он здесь
Vasily
Vladislav
@ijsgaus https://www.youtube.com/playlist?list=PLtWrKx3nUGBfx-TBNymPp3WSpeHp7vxj9
Крылатый
x
x
Тупля :)
Наверное нет, потому что кол-во вариантов может быть переменным?
x
Или да...
x
Флэгзы это всё позволяют, но приходится писать уродские if с проверками hasFlag, а хочется декларативности и матчинга
Pavel
Pavel
match x with
| ALL (A ||| B ||| C) x -> ...
| ANY (B ||| C) x -> ...
| NONEOF (A ||| C) x -> ...
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 дней это перебор, я обсчитался
Крылатый
Доброе утро, товарищи фшарперы!
Vasiliy
😂
Nikolay
Прорамист рассказывает про рамы? 🤔
Aleksandr
Очевидно я взял то, количество дней, которое удобнее посчитать))
Nikolay
Я бы за 200 рублей в час с удовольствием рассказывал про рамы
サイトー
サイトー
ну это банально
サイトー
это и мама может
Vladislav
Элмиш пока выглядит охуенно @angmarr
Vladislav
Правда я день втыкал чзх происходит
Andrew
Andrew
Раз 10 пересматривал рисуночки в их документации
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
ну ты тоже ченить предложи
Pavel
выше если что это примеры использования активных патернов
Hog
я вчера ж предложил. если уж так хочется избавиться от флагов - Set<'DU>
Hog
Vladislav
Igor
Пукан горит?
Да уже потух. Просто изначально непривычно и многословно.
Хочется обощить этот бойлерплейт в отдельную библиотечку (у меня пока не получилось).
Igor
В принципе мне в приложение нужно только
- стек (push/pop для окон)
- и табы
Vladislav
Hog
x
Vladislav
Hog
x
Ужасно же? Трижды дернуть contains чтоб проверить три флага
x
По сути тот же hasFlag
Vasily
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) => четвертый кейс
вот для сетов порядок будет решающим
Vasily