Size: a a a

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

2021 March 21

AC

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

VS

Vadim Selin in Clojure — русскоговорящее сообщество
вопрос от начинающего:
Я создал проект на re-frame и для него нужно ещё крохотный server side — api в два метода. Для этого api не очень хочется тащить в проект что-то большое и серьёзное.
Поскольку в shadow-cljs есть встроенный http сервер для разработки я вставил свои обработчики в него src/clj/<projectname>/handler.clj. Но теперь мне хочется чтобы код из этого обработчика как-то перегружался внутри jvm когда я редактирую файл. Для режима разработки я запускаю lein watch, но shadow-cljs присматривает только за фронтендом.
Что можно сделать?
источник

DP

Dmitry Ponyatov in Clojure — русскоговорящее сообщество
а какие-нибудь подвижки в области применения Clojure в комплекте с Graal (AOT) или Android4 есть?
источник

DP

Dmitry Ponyatov in Clojure — русскоговорящее сообщество
или мб Clojure + Truffle
источник

DP

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

ND

Nikita Domnickij in Clojure — русскоговорящее сообщество
Anton Chikin
Так человек должен думать как передавать туда мапой или не мапой
Доёб на пустом месте
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Мне тоже кажется, что @achikin неправильно понял, что изменилось, и докрутил своими домыслами.

Как я понял, всего лишь добавился один иф в механизм дестракчеринга мапы из сиквенса. Если в сиквенсе всего один элемент и это мапа, то присвой эту мапу.

Это полностью обратно совместимое и однозначное изменение, так как раньше для дестракчеринга из сиквенса нужно было чётное число элементов ключ-значение
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Я посмотрел исходник — там скорее даже если последний (не единственный, как я думал) элемент сиквенса — мапа, то используют эту мапу. https://github.com/clojure/clojure/commit/3c9307e27479d450e3f1cdf7903458b83ebf52d7
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
То есть раньше (let [{a :a} [:c 3 :b 2 :a 1]]) работало, а (let [{a :a} [:c 3 :b 2 {:a 1}]]) бросало эксепшн, а в 1.11 оба работают.
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Timur Latypoff
То есть раньше (let [{a :a} [:c 3 :b 2 :a 1]]) работало, а (let [{a :a} [:c 3 :b 2 {:a 1}]]) бросало эксепшн, а в 1.11 оба работают.
О, нифигасе, клева
источник

IS

Ilshat Sultanov in Clojure — русскоговорящее сообщество
На мой взгляд новый дестракчеринг добавили для запуска функций через clojure -X и -M. -X требовал функу с 1 аргументом (мапой). А флаг -M - [& args]. И позиционные аргументы теперь можно спокойно заменить на именованные
источник

IS

Ilshat Sultanov in Clojure — русскоговорящее сообщество
ждём tools.build и ещё какие-то тулзы
источник

VG

Vladislav Ganshin in Clojure — русскоговорящее сообщество
Timur Latypoff
То есть раньше (let [{a :a} [:c 3 :b 2 :a 1]]) работало, а (let [{a :a} [:c 3 :b 2 {:a 1}]]) бросало эксепшн, а в 1.11 оба работают.
На первый взгляд изменение и правда выглядит непривычно, от того, что теперь можно при одной сигнатуре метода протолкнуть параметры двумя способами. Чувствую будет часто останавливать код вида (let [{a :a} [:a 1 {:a 2}]] a) и заставлять вспоминать,  что вернет let таком случае.
источник

A

Andrey in Clojure — русскоговорящее сообщество
(defn nil-safe-aggr
 [fun coll]
 (if-let [numbers (seq (remove nil? coll))]
   (apply fun numbers)
   nil))

(def nil-safe-max (partial nil-safe-aggr max))
(def nil-safe-min (partial nil-safe-aggr min))

Выглядит как костыль, подозреваю, что можно лучше. Подскажите)
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Andrey
(defn nil-safe-aggr
 [fun coll]
 (if-let [numbers (seq (remove nil? coll))]
   (apply fun numbers)
   nil))

(def nil-safe-max (partial nil-safe-aggr max))
(def nil-safe-min (partial nil-safe-aggr min))

Выглядит как костыль, подозреваю, что можно лучше. Подскажите)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Andrey
(defn nil-safe-aggr
 [fun coll]
 (if-let [numbers (seq (remove nil? coll))]
   (apply fun numbers)
   nil))

(def nil-safe-max (partial nil-safe-aggr max))
(def nil-safe-min (partial nil-safe-aggr min))

Выглядит как костыль, подозреваю, что можно лучше. Подскажите)
ну можно по другому то же самое написать
  (some->> coll
          (remove nil?)
          (seq)
          (apply fun))
источник

A

Andrey in Clojure — русскоговорящее сообщество
Честно говоря, не понял. Смысл моего кода в том, чтоб не падать с NPE после apply max. А как мне тут fnil поможет, если я не хочу ничего вместо nil подставлять...
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Andrey
(defn nil-safe-aggr
 [fun coll]
 (if-let [numbers (seq (remove nil? coll))]
   (apply fun numbers)
   nil))

(def nil-safe-max (partial nil-safe-aggr max))
(def nil-safe-min (partial nil-safe-aggr min))

Выглядит как костыль, подозреваю, что можно лучше. Подскажите)
я бы записал как-то так
(def nil-safe-max #(transduce (remove nil?) max Integer/MIN_VALUE %))
(def nil-safe-min #(transduce (remove nil?) min Integer/MAX_VALUE %))
источник

A

Andrey in Clojure — русскоговорящее сообщество
Sergey Trofimov
я бы записал как-то так
(def nil-safe-max #(transduce (remove nil?) max Integer/MIN_VALUE %))
(def nil-safe-min #(transduce (remove nil?) min Integer/MAX_VALUE %))
Уф, осталось только трансдюсеры освоить 😁 спасибо, буду разбираться
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Andrey
Уф, осталось только трансдюсеры освоить 😁 спасибо, буду разбираться
правда тут коллекция одним параметром идет
источник