LINUX.ORG.RU

История изменений

Исправление 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 может быть функцией, а не макросом.