class StringCategory {
static String camelize(String self) {
def newName = self.split("_").collect() {
it.substring(0, 1).toUpperCase() + it.substring(1, it.length())
}.join()
newName[0..<1].toLowerCase() + newName[1..-1]
}
static Integer getPm(Integer self) {
(self == 12 ? 12 : self + 12)
}
static Integer getAm(Integer self) {
self == 12 ? 0 : self
}
}
class SpeakCategory {
static String shout(String self) { // Method argument is String, so we can add shout() to String object.
self.toUpperCase() + '!!'
}
static String whisper(String self, boolean veryQuiet = false, Integer a = 0) {
"${veryQuiet ? 'sssssssh' : 'sssh'}.. $self $a"
}
static String army(String self) {
"$self. Sir, yes sir!"
}
}
use (StringCategory) {
println 'Hi_there_fella'.camelize()
println 12.am + ' o\'clock'
println 2.pm + ' o\'clock'
}
use (SpeakCategory) {
println "Pay attention".shout()
println "Be vewy, vewy, quiet.".whisper()
println "Be vewy, vewy, quiet.".whisper(true, 1)
println "Groovy rocks".army()
}
// Or we can use the @Category annotation.
// implicit 'this', no 'self' arg passed in
@Category(String)
class StreetTalk {
String hiphop(Integer times = 1) {
"Yo, yo, here we go! " * times + "${this}"
}
}
use(StreetTalk) {
println 'Groovy is dope!'.hiphop(2)
}
http://groovyconsole.appspot.com/script/448002
No comments:
Post a Comment