Size: a a a

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

2021 March 24

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Все это делается макросом <<-
https://github.com/rplevy/swiss-arrows#the-back-arrow
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
обожи, let в тредмакросах, дайте развидеть…
источник

DS

Denis Shilov in Clojure — русскоговорящее сообщество
вот что бывает, когда люди добираются до макросов
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
обожи, let в тредмакросах, дайте развидеть…
Это гораздо композабельное, чем cond-let и подобное.

(defmacro <<- [& body]
 `(->> ~@(reverse body)))
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
Это гораздо композабельное, чем cond-let и подобное.

(defmacro <<- [& body]
 `(->> ~@(reverse body)))
а почему просто не поменять местами аргументы?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
а почему просто не поменять местами аргументы?
какие аргументы?

эта штука убирает лесенку


(if a
 (f a)
 (let [b ...]
   (if b
     (g b)
     ...)))

(<<-
(if a
  (f a))
(let [b ...])
(if b
  (g b)
  ...))
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
какие аргументы?

эта штука убирает лесенку


(if a
 (f a)
 (let [b ...]
   (if b
     (g b)
     ...)))

(<<-
(if a
  (f a))
(let [b ...])
(if b
  (g b)
  ...))
->>
источник

MK

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

MK

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

(->>
(if b
  (g b)
  ...)
(let [b ...])
(if a
  (f a)))

тут b объявляется позже использования
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
хз, мне кажется это велосипед, при этом ещё и ухудшающий чтение кода
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
ну когда у тебя вынуждено получается лесенка из 5-6 ступенек, то это ок
но вообще, да, нужно сначала без этого попробовать сделать
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
http://github.com/egamble/let-else вот это лучше, например
источник

MK

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

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
читабельность
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
ну и let в thread макросах - это имхо очень плохо
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
ну ок, захочешь ты кусок кода завернуть в _свою_ функцию внутни cond-let, let-else и т.п. как это сделать?
а с <<- это элементарно
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
ну ок, захочешь ты кусок кода завернуть в _свою_ функцию внутни cond-let, let-else и т.п. как это сделать?
а с <<- это элементарно
не понимаю о чём речь, приведи пример плз
источник

IG

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

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
вово, норкомания из той же серии
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
> A very cool and useful threading macro that everyone totally
 needs
источник