2013-05-03 20 views
13

Clojure 1.5 dodaje nowe makra gwintowania, w tym:Praktyczne przykłady zastosowania dla nowego some- Clojure za> makro

  • some->
  • some->>

Lista zmian ma to contrived przykład ilustrujący jak some-> działa:

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 

Rozmawiając z innymi programistami, trudno jest wymyślić dobry, praktyczny przykład dla some->. Kiedy użyłeś some-> do rozwiązania problemu w świecie rzeczywistym?

Odpowiedz

14

some-> mogą być wykorzystywane do „auto-guard” gwintowany seria etapów przetwarzania, gdzie jakaś część w łańcuchu (szczególnie w środku) może zwrócić nil który spowodowałoby awarię logiki w dalszej części łańcucha.

Poszczególne przykłady mogą obejmować wątki funkcji clojure wraz z interwałami java, w których należy chronić przed wyjątkami wskaźnika pustego.

+1

+1 dla wspomnieć współdziałanie Java. Wydaje się to być idealnym zastosowaniem dla 'some->' – joelittlejohn

1

clojuredocs.org page on some-> ma pewne some-> przykłady *:

(-> {:a 1} :b inc) 
;; NullPointerException clojure.lang.Numbers.ops (Numbers.java:942) 

(some-> {:a 1} :b inc) 
;; nil 

* pun przeznaczone

Powiązane problemy