2013-05-03 5 views
13

Clojure 1.5 fügt neue Threading-Makros, einschließlich:Praktische Anwendungsbeispiele für Clojure Der neue Manch-> Makro

  • some->
  • some->>

Das Changelog hat dieses erfundene Beispiel zu veranschaulichen, wie some-> funktioniert:

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 

Im Chat mit anderen Programmierern fiel es uns schwer, ein gutes, praktisches Beispiel für some-> zu finden. Wann haben Sie some-> verwendet, um ein reales Problem zu lösen?

Antwort

14

some-> kann eine Gewinde Reihe von Verarbeitungsschritten zu „auto-Guard“ verwendet werden, wo in der Kette ein Teil (vor allem in der Mitte) könnte nil zurück, das würde einen logischen Fehler weiter unten in der Kette verursachen.

Besondere Beispiele könnten Threading Clojure-Funktionen zusammen mit Java-Interop, wo Sie gegen Nullzeiger Ausnahmen schützen müssen.

+1

+1 für Java-Interop zu erwähnen. Dies scheint wie eine perfekte Verwendung für 'some->' zu sein – joelittlejohn

1

Die clojuredocs.org page on some-> hat einige some-> Beispiele *:

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

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

* pun intended

Verwandte Themen