Недавно увидев презентацию протоколов Clojure, я был весьма впечатлен тем, насколько простым способом можно сделать расширения существующих типов. Однако я был почти уверен, что уже видел подобный способ на каком-то другом языке, и через некоторое время я узнал, что это Groovy Categories.
Сравните это:
@Category(String) class StringCategory {
String lower() {
return this.toLowerCase()
}
}
use (StringCategory) {
println("TeSt".lower())
assert "test" == "TeSt".lower()
}
с эквивалентом протокола Clojure (взято из ответа mikera ниже и протестировано на ideone.com)
(defprotocol Lowerable
(lower [x]))
(extend-protocol Lowerable
String
(lower [s]
(.toLowerCase s)))
(println (lower "HELLO"))
мой вопрос:
Отказ от ответственности: я полный новичок в Clojure!