最近Clojureプロトコルのプレゼンテーションを見てきましたが、私は既存のタイプへの拡張をこのように行うことができることに非常に感銘を受けました。 しかし、他の言語でこれをやっているのと同じような方法を既に見てきたことは確かであり、しばらくしてGroovyのカテゴリであることが分かりました。ClojureプロトコルとGroovyカテゴリの相違点
この比較:私の質問がある
(defprotocol Lowerable
(lower [x]))
(extend-protocol Lowerable
String
(lower [s]
(.toLowerCase s)))
(println (lower "HELLO"))
(mikera's answer below and tested in ideone.comから取られた)Clojureのプロトコルと同等に
@Category(String) class StringCategory {
String lower() {
return this.toLowerCase()
}
}
use (StringCategory) {
println("TeSt".lower())
assert "test" == "TeSt".lower()
}
を:
- パフォーマンスの違いから、ほかに(それはと言われていますこの点に関してClojureは高度に最適化されています) - 2つのアプローチの間には意味的な違いがありますかチェス?
- ぎこちない構文のほかに、Groovyのアプローチには論理的に間違っているものはありますか?
免責事項:私は完全なClojure初心者です!
この質問はかなり興味深いものです。私たちのClojure-enlightened以外のClojureの同等物、および構文/簡潔性の比較のためにClojureの同等物を追加できますか? :D – epidemian
申し訳ありませんが、私はしたいと思います、それはできません。サイトhttp://clojure.org/protocolsには非常に似たサンプルがありますが、今は同等のコードをテストすることができないため、動作しないコードを投稿したくありません。残念ながら、GroovyのWebコンソールのようなWebコンソールはありません(try-clojure.orgにはコンソールがありますが、改行で区切ったコードを貼り付けても失敗します)。 – Ice09
[ideone](http://ideone.com/)で試してみることもできますか? – epidemian