В Java я обычно делаю это,Clojure: несколько привязок Пусть
MyObject o1 = new MyObject();
o1.doSomething();
MyObject o2 = new MyObject();
o2.doWith(o1);
MyObject o3 = new MyObject();
o3.doWithBoth(o1, o2);
В Clojure, если я использую пусть привязок, он может выглядеть,
(let [o1 (create-obj)]
(.doSomething o1)
(let [o2 (create-obj)]
(.doWith o2 o1)
(let [o3 (create-obj)]
(.doWithBoth o3 o1 o2))))
Код выращивает вправо которая является уродливой и трудно поддерживать. Есть лучший способ сделать это?
Что делает as-> do ?? Попробовал это сделать, но ничего не смог найти ... –
Он преобразует '(as-> expr sym form1 form2 ...)' in '(let [sym expr sym form1 sym form2 ...] sym)' , См. '(Doc as ->)' в REPL (> = 1.5.0) или следуйте [этой ссылке] (http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/ as->), чтобы увидеть то же самое на странице API Clojure. (Я не смог найти стабильную ссылку на API 1.5.x, поэтому вместо ссылки на «текущий» я ссылаюсь.) –
Чтобы быть понятным, вы должны использовать 'as->' inside 'doto':' (doto 1 (as-> foo (+ foo 2) (* foo 3) (println foo))) 'печатает 9 и возвращает 1. –