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. 可以给我一个xsl模板的“模式”的例子吗?
- 4. 为什么我们使用'最终',你能给我一个真实世界的例子吗?
- 5. 你可以选择从一个实例到另一个实例的表吗?
- 6. 什么是还原变量?任何人都可以给我一些例子吗?
- 7. JavaCC:请给我链接到“真实”的例子
- 8. 我可以制作一个HALT_ONCE宏吗?
- 9. 有人可以给我一些WPF的建议吗?
- 10. Ember.js的真实例子
- 11. (新手)有人可以给我一个活动水平喜好的例子吗?
- 12. 有人可以给我一个“hello world”的ASP.NET登录例子吗?
- 13. 你能告诉我一些关于Keymap.js的例子吗?(权威指南)?
- 14. 你可以复合过滤器的例子吗?
- 15. 我可以将问题从一个SonarQube实例转发给另一个吗?
- 16. 有人可以给我一个node.js应用程序的例子
- 17. 我可以举个例子吗?
- 18. 我们可以构建一个`OpCode`的实例吗?
- 19. 使用用于Clojure的新some-的实际例子>宏
- 20. 可以StringBuilder替换一个实例吗?
- 21. 你可以在另一个excel表格中运行宏吗?
- 22. 我可以实例化我的活动...我应该吗?
- 23. 你可以在自己的入口点实例化一个类吗?
- 24. 我们可以更新视图中的真实数据吗?
- 25. 我们可以给任何uiview一些背景图片吗?
- 26. 有人可以指点我一些AVFoundation示例源代码吗?
- 27. 任何人都可以给两个LRU和LFU的例子吗?
- 28. 你可以在另一个项目中实例化一个类吗?
- 29. 你可以把一个Canvas实例放入一个jQuery画廊吗?
- 30. 你可以通过Property setter实例化对象吗?