Практические примеры использования для Clojure new some-> macro
Clojure 1.5 добавляются новые макросы, в том числе:
В журнале изменений есть этот надуманный пример, иллюстрирующий, как работает some->
:
user=> (defn die [x] (assert false))
#'user/die
user=> (-> 1 inc range next next next die)
AssertionError Assert failed: false user/die (NO_SOURCE_FILE:65)
user=> (some-> 1 inc range next next next die)
nil
Беседуя с другими программистами, нам трудно было подумать о хорошем, практическом примере для some->
. Когда вы использовали some->
для решения реальной проблемы?
Ответы
Ответ 1
some->
может использоваться для "автоматической защиты" серии потоков с чередой, где некоторая часть в цепочке (особенно в середине) может возвращать nil
, что приведет к дальнейшему сбою логики в цепочке.
Конкретные примеры могут включать функции threading clojure вместе с java-взаимодействием, где вам нужно будет защищать от исключений нулевого указателя.
Ответ 2
В поиске кода GitHub появляется довольно много примеров
Ответ 3
Страница clojuredocs.org на some- > содержит несколько примеров some->
*:
(-> {:a 1} :b inc)
;; NullPointerException clojure.lang.Numbers.ops (Numbers.java:942)
(some-> {:a 1} :b inc)
;; nil
* каламбур