2015-03-11 3 views
8

Ich habe das Gefühl, dass mir etwas fehlt, mit dem Groovy Strings bearbeitet. Ich erkenne, dass sie unveränderlich sind, aber was ich tun möchte, ist einen Wert zur Laufzeit zu interpolieren. Ich kann nicht herausfinden, wie. Lassen Sie mich ein wirklich einfaches Beispiel in Python geben (als "ausführbaren Pseudocode"), um zu veranschaulichen, was ich meine. Dann gebe ich, was ich in Groovy versucht habe.Groovige String-Interpolation mit nur zur Laufzeit bekanntem Wert

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') 

Die obigen Drucke: Hallo, Mario!

Groovy

// string_sample.groovy 

class MyClass { 

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

    MyClass() { 
    } 

    void sayHello(name) { 
     println greeting 
    } 
} 

m = new MyClass() 
m.sayHello('Mario') 

Die obige Groovy Skript beklagt, dass name unbekannt ist:

Caught: groovy.lang.MissingPropertyException: No such property: name for class: MyClass

Ich verstehe, was passiert ist und warum. Ich bin mir nicht sicher, was ich dagegen tun soll. Ich weiß, dass String.format verwendet werden kann, was nicht so schlimm ist:

String greeting = "Hello, %s!" 

    // Omitted... 

    void sayHello(name) { 
     println String.format(greeting, name) 
    } 

ich gerade denke, dass vielleicht gibt es eine groovier Art und Weise tun. Weiß jemand? Vielen Dank!

Antwort

9

Sie einen Verschluss verwenden:

class MyClass { 

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

    MyClass() { 
    } 

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

Ah, danke! Ich wusste, dass es einen "groovigeren" Weg gab. Ich habe einige Beispiele im Internet gefunden, die auf Schließungen hindeuteten, aber ich konnte es nicht herausfinden. (Ich bin neu in der Verwendung von ihnen.) So viele der Groovy Tutorials und Beispiele, die ich finde, scheinen mir zu kompliziert, wie der Autor versucht, so viel wie er oder sie in einem Beispiel einpacken könnte. Ich verstehe es jetzt und ich mag es. – Mario