Size: a a a

2021 November 26

DF

Denis Fakhrtdinov in ErlangRus
А, ну так бы сразу 🙂
источник

DF

Denis Fakhrtdinov in ErlangRus
Но я всё ещё не понимаю как это написать компактно.
источник

DF

Denis Fakhrtdinov in ErlangRus
Разве что написать макрос для тестов, который превратит кашу в компактную запись.
источник

DZ

Danil Zagoskin in ErlangRus
ну вот с хелперами это компактно:

[X || <<X:4>> <= Bin, chars1(X) == $a, char3(X) == $c]

В данном случае даже binary:at можно использовать, но на все возможные проверки надо городить целый модуль хелперов, а это дичь.
источник

A ß in ErlangRus
по другому особо не сделаешь
источник

DF

Denis Fakhrtdinov in ErlangRus
Ну вот это
`49> [<<"a", B/utf8, "c", D/utf8>> || <<"a", B/utf8, "c", D/utf8>> <= <<"abcdabefabqtabmnafcf">>].
[<<"abcd">>,<<"afcf">>]`
завернуть в макрос.
источник

DF

Denis Fakhrtdinov in ErlangRus
?match(<<"a", B/utf8, "c", D/utf8>>, Bin)
источник

A ß in ErlangRus
или
-define(foo(B,D), <<"a",B/utf8,"c",D/utf8>>).
[foo(B,D) || foo(B,D) <= <<...>>].
источник

DZ

Danil Zagoskin in ErlangRus
нет, это нельзя в макрос, потому что 100500 макросов загадят код.
источник

DF

Denis Fakhrtdinov in ErlangRus
Ну вам шашечки или ехать? 🙂
источник

DZ

Danil Zagoskin in ErlangRus
я такой костыль родил:

[X || <<X:4/binary>> <= <<"abcdabefabqtabmnatcx">>, <<"a", _, "c", _>> <= X].
источник

A ß in ErlangRus
источник

DZ

Danil Zagoskin in ErlangRus
но тут надо осторожно, чтобы второй генератор не сработал дважды
источник

DZ

Danil Zagoskin in ErlangRus
и всё это выглядит как повод для улучшения компилятора
источник

A ß in ErlangRus
возможно стоит поднять тему связывания переменных в бинаре <<X = <<...>> >>
источник

DF

Denis Fakhrtdinov in ErlangRus
Я вообще очень редко пользуюсь binary comprehensions, каждый раз приходится вспоминать как оно там работает.
источник

DZ

Danil Zagoskin in ErlangRus
и что обидно с этими бинарями — со списками всё более чем ок:

> [X || X = {a,_,_} = {_,2,_} <- [{a,1,2}, {b,1,3}, {a,2,3}, {b,2,1}]].
[{a,2,3}]

т.е. сработали оба паттерна в левой части
источник

A ß in ErlangRus
да, неконсистентно
источник

A ß in ErlangRus
но если вспомнить что list comprehensions превращается в filtermap, то становится понятно почему с бинарями нельзя
источник

DZ

Danil Zagoskin in ErlangRus
кажется, это просто кому-то было лень. Сделать то же самое с бинарями, по-моему, не особо сложнее
источник