Size: a a a

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

2019 September 03

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
+ неизвестно источник конфигов: вчера это был edn, сегодня env, а завтра может быть сторонний сервис или комбинация всего выше перечисленного
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
ну вот за этим кастомный ридер макрос и должен следить, в нем можно заизолировать процесс получения переменной среды
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
а где можно почитать подробней про кастомные ридеры?
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
https://github.com/edn-format/edn#tagged-elements
вот часть спецификации edn
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
https://clojuredocs.org/clojure.edn/read
тут формат параметров ридера
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L7750-L7756
и вот тут имплементация дефолтных ридеров, типа #inst
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Mike Bohdan
а где можно почитать подробней про кастомные ридеры?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
@prepor а как получить список используемых биндингов/замыканий в функции?
(let [a 1
     b 2
     f1 (fn [] a)
     f2 (fn [] b)]
 (get-closures f2)) ;;#=> [b]


(filter symbol? (flatten `(fn [x] 'y))) не очень подходит, т.к. возвращает в том чилсе и y

или нужно смотреть в сторону tools.analyzer? но это как-то сложно
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
@prepor а как получить список используемых биндингов/замыканий в функции?
(let [a 1
     b 2
     f1 (fn [] a)
     f2 (fn [] b)]
 (get-closures f2)) ;;#=> [b]


(filter symbol? (flatten `(fn [x] 'y))) не очень подходит, т.к. возвращает в том чилсе и y

или нужно смотреть в сторону tools.analyzer? но это как-то сложно
ну сорян! )
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Andrew Rudenko
ну сорян! )
а как тогда сбросить &env?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
вернее не сбросить
у clojure.lang.Compiler$LocalBinding есть поле used
и оно мутабельное
можно через него попробовать
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Andrew Rudenko
ну сорян! )
я не занаю зачем я это сделал, но сделал
just for fun

(ns foo
 (:import
  [clojure.lang Compiler Compiler$C]))

(defn get-closure-names* [form env]
 (let [ex      (with-bindings {Compiler/LOCAL_ENV env}
                 (Compiler/analyze Compiler$C/EXPRESSION form))
       closes  (.closes ex)]
   (->> closes
        (keys) ;; у них ключи и значения совпадают
        (map #(.-sym %)))))
   
(defmacro get-closure-names [form]
 `(quote ~(get-closure-names* form &env)))

(let [a 1
     b 2]
 (get-closure-names (fn [x] [a]))) ;;=> '(a)


но это работает только для форм с fn,  (partial str a) уже не работает т.к. она уже готовый объект возвращает.
и у меня нет идей как это можно в cljs сделать, вот там наверное никак.
источник
2019 September 04

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Итого
Регулярки и функции имеют модификатор final. Не получится отнаследовать или сделать динамический прокси.
Для регулярок можно сделать обертку, но тогда стандартные функции не будут с ней работать.
Для функций тоже можно сделать обертку и через рефлексию читать приватные поля.
Как-то все это криво выглядит.
источник

DA

Daniil Arsentiev in Clojure — русскоговорящее сообщество
Прошу помощи и сочувствия у кложуристов знакомых с питоном.
Есть крупный проект (система принятия решений) представляющий из себя большой конечный автомат.
Мне нужно привести проект в порядок и начать я хочу с написания спецификации для функций перехода состояния.
Мне нужна библиотека для питона на подобие spec. Основное требование - спецификация должна быть открытой
источник

DA

Daniil Arsentiev in Clojure — русскоговорящее сообщество
Может кто подсказать хороший вариант
источник

OS

Olim Saidov in Clojure — русскоговорящее сообщество
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Crux так же как и датомик все в память выгребает?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
и на стороне jvm все обсчитывает?
источник

MG

Mikhail Gusarov in Clojure — русскоговорящее сообщество
А где можно обсчитывать, если не в памяти?
источник

OS

Olim Saidov in Clojure — русскоговорящее сообщество
источник