Clojure是否受ObjectiveC协议影响?如果没有,那么他们有什么不同?Clojure的协议会影响?
6
A
回答
3
您可能会发现有趣的这些文章和链接:
- http://kirindave.tumblr.com/post/658770511/monkey-patching-gorilla-engineering-protocols-in - 对Objective-C的触摸了一下
- http://www.assembla.com/wiki/show/clojure/Protocols - 富希基的动机协议
- http://groups.google.com/group/clojure/msg/330c230e8dc857a9 - 在协议和其他更丰富这样的东西
2
他们共享相同的名称和概念是相关的 - 但是Clojure协议a更通用,旨在解决“表达问题”。这video is very interesting to watch。目标C协议是更类似于Java/C#接口 - 它们指定了具体类可以实现的一组方法。但是,您必须在具体类中提供这些方法,这通常意味着您在实践中控制了正在扩展的类的源代码。
Clojure的协议允许你定义一组延伸到处理在一个多态方式任何类的功能,并且可以单独地提供的实现即使不控制要扩展的类。
一个Clojure的协议延伸到例如java.lang.String类(你肯定不控制!),还为特殊值为零(即空值)的例子:
;; define a protocol with one function
(defprotocol FooProtocol
(foo [this]))
;; extend the protocol to String and nil
(extend-protocol FooProtocol
java.lang.String
(foo [some-string] (str "Called foo on String: " some-string))
nil
(foo [_] "Called foo on nil value"))
(foo "hello")
=> "Called foo on String: hello"
(foo nil)
=> "Called foo on nil value"
相关问题
- 1. 嘲笑Clojure协议
- 2. Clojure的DEFTYPE和协议
- 3. 集结协议的Clojure宏
- 4. Heartbleed漏洞是否会影响SPDY协议?
- 5. 如何将Clojure协议扩展到其他协议?
- 6. Clojure的协议/功能优先
- 7. 纯Clojure中的Jabber/XMPP协议
- 8. 扩展库提供的协议,而不会影响其他用户
- 9. 类别对实现协议的类有什么影响?
- 10. 不兼容的协议版本是否有任何影响?
- 11. HTTPS协议是否受到Poodle SSLv3攻击的影响?
- 12. 改变的协议影响SQL Server连接
- 13. 以下Clojure协议有什么问题?
- 14. Clojure - 协议/多方法溢出
- 15. Clojure新手与协议奋斗
- 16. 如何在Clojure中编写monoid协议?
- 17. Rails协会/会议问题
- 18. 相对或绝对协议是否影响dns预取性能?
- 19. telnet协议:中断响应
- 20. 开幕和闭幕会议是否会影响效果?
- 21. 协议的哈希协议
- 22. 在Clojure中为协议方法提供建议
- 23. 多态协会影响Rails应用程序的性能?
- 24. 哪个协议会更“贵”?
- 25. 会话启动协议
- 26. 如何获取会议响应响应的会议请求?
- 27. 使用协议的异步响应
- 28. js与协会的响应
- 29. 会议在WebSphere应用服务器关闭的影响
- 30. SHIFT不会影响%*
感谢您的链接。 – 2010-09-11 00:51:36