Size: a a a

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

2019 June 23

AG

Alexey Golda in Clojure — русскоговорящее сообщество
А Laravel в общем-то даже не скрывается что inspired by Rails
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Alexey Golda
Для своих задач php вполне нормальная идея сегодня. А байки растут от тех кто в лучшем случае лет 7-10 назад "писал" на php что-то типа хелловорда.
Ну так и spring хорош
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
И оба хороши, и довольно разные. То есть еще и выбор есть.
источник

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Мне нужен merge но наоборот: вычесть из мапки другую мапку со сравниванием на совпадение
Можно это как-то лучше сделать?
>>> (reduce-kv (fn [m k v] (if (= (m k) v)
                              (dissoc m k)
                              m))
              {:a 1, :b 2, :c 3}
              {:b 2, :c 3})
{:a 1}
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
Можно посмотреть в сторону clojure.set/difference
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
Только на ключах, а потом взять их через select-keys
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
user=> (difference (set (keys {:1 1 :2 2 :3 3})) (set (keys {:1 1 :2 2})))
#{:3}
источник

SI

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

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Alexey Golda
user=> (difference (set (keys {:1 1 :2 2 :3 3})) (set (keys {:1 1 :2 2})))
#{:3}
Если только на ключах, то не проверяется равенство, а в таком случае гораздо проще будет
(apply dissoc {:a 1, :b 2, :c 3} (keys {:b 2, :c 3}))
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
Да, выглядит проще, не у компа, позже поиграюсь со значениями
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
ну вот так тоже работает вроде

(clojure.set/difference (set (seq m1)) (set (seq m2)))
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
но не уверен что оно работает как тебе надо
источник

SI

Serghei Iakovlev in Clojure — русскоговорящее сообщество
Так а чем не подходит
(use 'clojure.data)
(first (diff {:a 1 :b 2 :c 3} {:b 2 :c 3}))
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
тоже должно
источник

SI

Serghei Iakovlev in Clojure — русскоговорящее сообщество
user=> (let [a {:a 1 :b 2 :c 3}
 #_=>       b {:b 2 :c 3 :d 4}
 #_=>       [a1 b1] (clojure.data/diff a b)]
 #_=>   (merge a1 b1))
{:a 1, :d 4}
источник

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Serghei Iakovlev
user=> (let [a {:a 1 :b 2 :c 3}
 #_=>       b {:b 2 :c 3 :d 4}
 #_=>       [a1 b1] (clojure.data/diff a b)]
 #_=>   (merge a1 b1))
{:a 1, :d 4}
Да, так хорошо.спасибо!
источник

SI

Serghei Iakovlev in Clojure — русскоговорящее сообщество
велкам )
источник

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Помогите макрос написать. Хочу чтобы так работал:
>>> (macroexpand '(p x))
(do (println (str `x \:)
   (clojure.pprint/pprint x)
   x)

Пока что есть только вот это:
(defmacro p [data]
 `(do (println (str `data \:))
      (clojure.pprint/pprint ~data)
      ~data))

Там неправильно выводится имя переданной переменной
Т.е. я хочу использовать этот макрос для дебага: оборачивать вокруг переменной, получать вывод ввиде
<имя с неймспейсом>:
<приттипринтед значение>
И чтобы возвращалось значение переменной. Ну типа чтобы прям куда угодно его пихнуть и оно вывело и не нарушило ход программы, тк возвращает переданый в него аргумент
источник

MG

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

MG

Mikhail Gusarov in Clojure — русскоговорящее сообщество
user=> (macroexpand '(p x))
(do (clojure.core/println (clojure.core/str (quote user/data) \:)) (clojure.pprint/pprint x) x)
источник