Подтвердить что ты не робот

Практические примеры использования для Clojure new some-> macro

Clojure 1.5 добавляются новые макросы, в том числе:

  • some->
  • some->>

В журнале изменений есть этот надуманный пример, иллюстрирующий, как работает 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-> для решения реальной проблемы?

4b9b3361

Ответ 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

* каламбур