如果我在此更改Groovy DSL Doc中的代码。
添加一些字符串' hello world'发送电子邮件,像这样
email('hello world') { // change here
from 'dsl-guru@mycompany.com'
to 'john.doe@waitaminute.com'
subject 'The pope has resigned!'
body {
p 'Really, the pope has resigned!'
}
}
并更改
def email(def name, @DelegatesTo(EmailSpec) Closure cl) { // change here
def email = new EmailSpec()
def code = cl.rehydrate(email, this, this)
code.resolveStrategy = Closure.DELEGATE_ONLY
code.call(name) // change here
}
所以,如何修改EmailSpec类来获取字符串' hello world' ??
答案 0 :(得分:1)
告诉编译器将使用参数调用闭包,您需要添加ClosureParams
注释。
坚持你的榜样:
def email(def name,
@ClosureParams(value = SimpleType, options = "java.lang.String")
@DelegatesTo(EmailSpec) Closure cl) {
def email = new EmailSpec()
def code = cl.rehydrate(email, this, this)
code.resolveStrategy = Closure.DELEGATE_ONLY
code.call(name) // change here
}
将告诉编译器第一个参数是String
。
有关详细信息,请参阅groovy文档中的The @ClosureParams annotation部分。
答案 1 :(得分:0)
是的,我找到了一种方法,但并不完美。
简单
new EmailSpec(name) // change to
然而,我真的想使用groovy函数调用(名称)来解决它