История изменений
Исправление x3al, (текущая версия) :
Лучше просто избежать этого (f1 (f2 (f3 x))) на лиспе. Честно, никогда не приходилось этим пользоваться. Просто подумать, что в твоих функциях не так, что приходится пользоваться таким паровозом.
А если функции изкоробочные?
;; Use of `->` (the "thread-first" macro) can help make code
;; more readable by removing nesting. It can be especially
;; useful when using host methods:
;; Arguably a bit cumbersome to read:
user=> (first (.split (.replace (.toUpperCase "a b c d") "A" "X") " "))
"X"
;; Perhaps easier to read:
user=> (-> "a b c d"
.toUpperCase
(.replace "A" "X")
(.split " ")
first)
"X"
☝ из мануала по кложуре. compose делает примерно то же, что и ->, но с обратным порядком функций, без автоподстановки аргумента и обычно манипулирует с каррированными функциями (иначе он нафиг не нужен). Ну и абстрактный compose в вакууме может быть функцией, а не макросом.
В очередной раз скажу: compose в языках без автокаррирования практически не нужен в чистом виде.
Исходная версия x3al, :
Лучше просто избежать этого (f1 (f2 (f3 x))) на лиспе. Честно, никогда не приходилось этим пользоваться. Просто подумать, что в твоих функциях не так, что приходится пользоваться таким паровозом.
А если функции изкоробочные?
;; Use of `->` (the "thread-first" macro) can help make code
;; more readable by removing nesting. It can be especially
;; useful when using host methods:
;; Arguably a bit cumbersome to read:
user=> (first (.split (.replace (.toUpperCase "a b c d") "A" "X") " "))
"X"
;; Perhaps easier to read:
user=> (-> "a b c d"
.toUpperCase
(.replace "A" "X")
(.split " ")
first)
"X"
☝ из мануала по кложуре. compose делает примерно то же, что и ->, но с обратным порядком функций, без автоподстановки аргумента и обычно манипулирует с каррированными функциями (иначе он нафиг не нужен). Ну и compose может быть функцией, а не макросом.