最近看到了Clojure協議的演示文稿,對於現有類型的乾淨方式擴展可以這樣完成,我對此印象非常深刻。 但是,我很確定已經看到在其他語言中使用這種方法的類似方式,並且經過一段時間後我發現它是Groovy類別。Clojure協議和Groovy類別之間的區別
比較:
@Category(String) class StringCategory {
String lower() {
return this.toLowerCase()
}
}
use (StringCategory) {
println("TeSt".lower())
assert "test" == "TeSt".lower()
}
到Clojure的協議當量(從mikera's answer below and tested in ideone.com拍攝)
(defprotocol Lowerable
(lower [x]))
(extend-protocol Lowerable
String
(lower [s]
(.toLowerCase s)))
(println (lower "HELLO"))
我的問題是:
-
從性能差異
- 之外(這是說, Clojure在這方面高度優化) - 這兩種方式之間是否存在語義差異? CHES?
- 除了笨拙的語法,Groovy方法有什麼邏輯錯誤嗎?
聲明:我是一個完整的Clojure新手!
我覺得這個問題很有趣。您能否爲我們的非Clojure開明添加Clojure等價物,以及爲了語法/簡短比較的緣故? :D – epidemian 2012-03-30 00:14:04
對不起,我想,這只是我不能。在網站http://clojure.org/protocols上有一個非常相似的示例,但現在我無法測試等效代碼,因此我不想發佈一些可能無法使用的代碼。令人遺憾的是,沒有像Groovy Web控制檯那樣的Web控制檯(try-clojure.org上有一個控制檯,但我甚至沒有用新行分隔的代碼行來粘貼)。 – Ice09 2012-03-30 00:31:20
也許試試[ideone](http://ideone.com/)? – epidemian 2012-03-30 01:41:07