Size: a a a

Clojure — русскоговорящее сообщество

2020 November 08

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Camina Drummer
Было бы интересно почитать
Про проблемы, которые у меня возникли. Я хотел максимально возможно рассчитать в макросе до того, как начнет эвалиться тело макроса. И хотел сделать, чтобы максимально быстро работало.
1) В одном из вариантов я хотел вместо кложуровского вектора собрать джавовский эррэй из названий именованных групп. В другом хотел матчер создать заранее. С обоими вариантами плохо, потому что нельзя из переменных макросов напихать в тело макроса некложуровские структуры (ридер не знает, что с этим делать). В некоторых случаях эту проблему можно обойти (объяснить ридеру, как такое читать).
2) Я вот тут увидел, что кажется я не могу использовать свой макрос внутри лямбд удобно. Если я правильно понял, нельзя использовать переменные, над которыми функция замкнулась, внутри макроса
3) Макросы сложнее писать и отлаживать, чем функции :)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Anton Chikin
Лучше всего evil-cleverparens
Спасибо, попробую)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Но в целом мой макрос тривиально заменяется на функцию, я просто не хотел создавать кучу def-ов просто чтобы провести предварительные вычисления
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
Mikhail Borisov
Я пока не понимаю, как красиво оформлять в кложуре, так что на этот счет тоже комменты бы послушал)
я бы пример использования добавил в докстринг, чтобы при вызове доки видно было. И назвал бы mk-named-regex-fn, или как-то так
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Сейчас склонился к другому варианту, использовать все-таки функции в структуре данных
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Макросы и правда кучу проблем из ничего создают)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Иван Федоров
я бы пример использования добавил в докстринг, чтобы при вызове доки видно было. И назвал бы mk-named-regex-fn, или как-то так
Спасибо, обновил)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Хотя название мне не очень нравится
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
В общем вся эта пляска была ради того, чтобы можно было прям в cond писать и не проводить эти вычисления при каждом вызове
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
кавычки заэскейпи в докстринге
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
кавычки заэскейпи в докстринге
😂
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
в 19-й строке похоже можно использовать nth
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Да, можно, но я подумал, что мб там что-то интересное под капотом в nth происходит и не стал проверять
источник

a

alex in Clojure — русскоговорящее сообщество
а зачем по интам доставать группы, если у тебя уже названия namedGroups выдраны своей регуляркой? есть же https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#group%28java.lang.String%29
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Для скорости, опять же...
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Там если по строке доставать, то там внутренний "словарь" обходится
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
В общем, если штука нужная, я ща еще поковыряюсь, как это до ума довести
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Да, можно, но я подумал, что мб там что-то интересное под капотом в nth происходит и не стал проверять
просто он быстрее для векторов, чем get
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
просто он быстрее для векторов, чем get
Окей, спасибо)
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
интересно из спек компилить регекс
источник