2015-03-11 5 views
8

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!

risposta

9

Si potrebbe utilizzare una chiusura:

class MyClass { 

    def greeting = { name -> "Hello, ${name}!" } 

    MyClass() { 
    } 

    void sayHello(name) { 
     println greeting(name) 
    } 
} 
+0

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

Problemi correlati