Groovy字符串插值,其值仅在运行时已知

时间:2015-03-11 21:16:50

标签: groovy

我觉得我错过了Groovy处理字符串的方法。我意识到它们是不可变的,但我想要做的是在运行时插入一个值。我无法弄清楚如何。让我在Python中给出一个非常简单的例子(作为"可执行的伪代码")来说明我的意思。然后,我将给出我在Groovy中尝试过的内容。

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

以上版画:你好,马里奥!

Groovy的

// string_sample.groovy

class MyClass {

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

    MyClass() {
    }

    void sayHello(name) {
        println greeting
    }
}

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

上面的Groovy脚本抱怨name未知:

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

我了解发生了什么以及为什么。我不知道该怎么做。我意识到可以使用String.format,这不是很糟糕:

    String greeting = "Hello, %s!" 

    // Omitted...

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

我只是觉得可能有 groovier 这样做的方式。谁知道?谢谢!

1 个答案:

答案 0 :(得分:11)

您可以使用闭包:

class MyClass {

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

    MyClass() {
    }

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