我觉得我错过了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 这样做的方式。谁知道?谢谢!
答案 0 :(得分:11)
您可以使用闭包:
class MyClass {
def greeting = { name -> "Hello, ${name}!" }
MyClass() {
}
void sayHello(name) {
println greeting(name)
}
}