Mi sento come se mi mancasse qualcosa con come Groovy gestisce le stringhe. Mi rendo conto che sono immutabili, ma quello che mi piacerebbe fare è interpolare un valore in fase di runtime. Non riesco a capire come. Consentitemi di dare un esempio molto semplice in Python (come "pseudo-codice eseguibile") per illustrare cosa intendo. Poi darò quello che ho provato in Groovy.Interpolazione di stringhe di Groovy con valore noto solo al runtime
Python
# string_sample.py
class MyClass(object):
greeting = 'Hello, %s!'
def __init__(self):
object.__init__(self)
def sayHello(self, name):
print self.greeting % name
if __name__ == '__main__':
m = MyClass()
m.sayHello('Mario')
Le stampe di cui sopra: Ciao, Mario!
Groovy
// string_sample.groovy
class MyClass {
def greeting = "Hello, ${name}!"
MyClass() {
}
void sayHello(name) {
println greeting
}
}
m = new MyClass()
m.sayHello('Mario')
Lo script Groovy sopra lamenta che name
è sconosciuto:
Caught: groovy.lang.MissingPropertyException: No such property: name for class: MyClass
Capisco cosa sta succedendo e perché. Non sono sicuro di cosa fare al riguardo. Mi rendo conto che String.format
può essere utilizzato, che non è poi così male:
String greeting = "Hello, %s!"
// Omitted...
void sayHello(name) {
println String.format(greeting, name)
}
Sto solo pensando che forse c'è un modo groovier di farlo. Qualcuno sa? Grazie!
Ah, grazie! Sapevo che c'era un modo più "groovier". Ho trovato alcuni esempi sul web che alludevano alle chiusure, ma non riuscivo a capirlo. (Sono nuovo a usarli). Così molti dei tutorial di Groovy e gli esempi che trovo mi sembrano eccessivamente complicati, come l'autore che stava cercando di comprimere quanto avrebbe potuto in un solo esempio. Lo capisco adesso, e mi piace. – Mario