2013-05-03 25 views
13

Clojure 1.5 thêm macro luồng mới, bao gồm:Ví dụ thực tế sử dụng cho some- mới Clojure của> vĩ mô

  • some->
  • some->>

Các changelog có ví dụ contrived này để minh họa cách some-> hoạt động:

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 

Trò chuyện với các lập trình viên khác, chúng tôi thấy khó có thể nghĩ ra một ví dụ thực tế tốt cho some->. Khi nào bạn đã sử dụng some-> để giải quyết một vấn đề trong thế giới thực?

Trả lời

14

some-> có thể được sử dụng để "tự động bảo vệ" một loạt luồng của các bước xử lý, nơi một số phần trong chuỗi giá trị (đặc biệt là ở giữa) có thể trở nil mà sẽ gây ra một lỗi logic tiếp tục xuống chuỗi.

Ví dụ cụ thể có thể bao gồm các chức năng dò tìm đường cùng với nội dung tương tác java, nơi bạn sẽ cần phải bảo vệ chống lại ngoại lệ con trỏ null.

+1

1 đề cập đến Java interop. Điều này có vẻ như là một cách sử dụng hoàn hảo cho 'some->' – joelittlejohn

6

Mã GitHub tìm kiếm lần lượt lên khá một vài examples

+0

Tôi thích suy nghĩ của bạn :) – joelittlejohn

1

Các clojuredocs.org page on some-> có một số ví dụ some-> *:

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

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

* ý định chơi chữ

Các vấn đề liên quan