3
A
回答
9
比較:
user> (:baz (:bar (:foo {:foo {:bar {:baz 123}}})))
123
user> (java.io.BufferedReader. (java.io.FileReader. "foo.txt"))
#<BufferedReader [email protected]>
user> (vec (reverse (.split (.replaceAll (.toLowerCase "FOO,BAR,BAZ") "b" "x") ",")))
["xaz" "xar" "foo"]
到:當你想要一個簡潔的方式嵌套調用
user> (-> {:foo {:bar {:baz 123}}} :foo :bar :baz)
123
user> (-> "foo.txt" java.io.FileReader. java.io.BufferedReader.)
#<BufferedReader [email protected]>
user> (-> "FOO,BAR,BAZ" .toLowerCase (.replaceAll "b" "x") (.split ",") reverse vec)
["xaz" "xar" "foo"]
->
使用。它可以讓你按照他們將被調用的順序列出調用,而不是內部調出,這可以更具可讀性。在第三個例子中,注意一些參數與它們所屬的函數之間有多少距離; ->
可讓您將參數和函數調用分組更清晰。因爲它是一個宏,它也適用於Java調用,這很好。
->
不是那麼強大,它只是時不時地爲你節省幾個parens。是否使用它是風格和可讀性的問題。
查看clojure.zip的底部,瞭解如何有用的極端示例。
(-> dz next next next next next next next next next remove up (append-child 'e) root)
5
從wiki兩者我總是發現這個例子中令人印象深刻:
user=> (import '(java.net URL) '(java.util.zip ZipInputStream))
user=> (-> "http://clojure.googlecode.com/files/clojure_20081217.zip"
URL. .openStream ZipInputStream. .getNextEntry bean :name)
正如布賴恩說 - 它不是「有用」這麼多的不同的風格。「我發現所有Java互操作這種形式的Y和Z的「開始X」然後做......做比Z到ŸX的可讀性更強
基本上,你有4個選項:
; imperative style named steps:
(let [X something
b (Y X)
c (Z b)] c)
; nested calls
(Z (Y X))
; threaded calls
(-> X Y Z)
; functional composition
((comp Z Y) X)
我找到 - >真的很適合Java互操作,但在其他地方避免它。從#clojure
2
(defn search-tickets-for [term]
(-> term search zip-soup first :content
((partial filter #(= :body (:tag %)))) first :content
((partial filter #(= :div (:tag %))))
((partial filter #(= "content" ((comp :id :attrs) %))))
((partial map :content)) first ((partial map :content))
((partial map first)) ((partial filter #(= :ul (:tag %)))) first :content
((partial map :content))
((partial map first))
((partial mapcat :content))
((partial filter #(= :h4 (:tag %))))
((partial mapcat :content))
((partial filter #(= :a (:tag %))))
((partial mapcat :content))))
clojurebot使用這個搜索assembla門票
相關問題
- 1. 你可以說一些真實的界面和抽象類的例子嗎?
- 2. 你可以給一個重寫的例子嗎?
- 3. 你可以給我一個沒有框架的依賴注入的例子嗎?
- 4. 可以給我一個xsl模板的「模式」的例子嗎?
- 5. 爲什麼我們使用'最終',你能給我一個真實世界的例子嗎?
- 6. 有人可以給我一個分層架構的例子嗎?
- 7. 你可以選擇從一個實例到另一個實例的表嗎?
- 8. 什麼是還原變量?任何人都可以給我一些例子嗎?
- 9. 你能給我一個不可序列化數據的例子嗎?
- 10. 你可以舉一個如何使用PHP __method__的例子嗎?
- 11. 你能給我跨域的例子
- 12. 有人可以請一個真實的例子解釋我的功能和方法在JavaScript中的區別嗎?
- 13. 你可以給我來源哪裏可以找到clojure開發堆棧的例子嗎?
- 14. 你可以給出的主要和外鍵的例子在sql
- 15. 你可以禁止本地實例化一個類嗎?
- 16. 我可以將Orchard CMS設置爲我的「真實」網站的子目錄嗎?
- 17. 在Java中,我可以創建「基於」超類實例的子類實例嗎?
- 18. JavaCC:請給我鏈接到「真實」的例子
- 19. 我可以製作一個HALT_ONCE宏嗎?
- 20. 我可以將一組符號傳遞給宏嗎?
- 21. 有人可以給我一些WPF的建議嗎?
- 22. Ember.js的真實例子
- 23. 真實的例子「=」使用
- 24. 有人可以給我一個「hello world」的ASP.NET登錄例子嗎?
- 25. 有人可以給我看一個使用rspec使用failure_message_for_should的例子嗎?
- 26. (新手)有人可以給我一個活動水平喜好的例子嗎?
- 27. 你可以複合過濾器的例子嗎?
- 28. 你可以開始一個活動作爲自己的一個實例嗎?
- 29. 你能告訴我一些關於Keymap.js的例子嗎?(權威指南)?
- 30. 哪裏可以找到flex和野牛的真實例子?