0

如果我在这里更改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' ?

4

2 回答 2

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
}

将告诉编译器第一个参数是 a String

有关更多详细信息,请查看groovy 文档中的 @ClosureParams 注释部分。

于 2017-08-09T15:47:01.760 回答
0

是的,我找到了一种方法,但并不完美。

简单的

new EmailSpec(name)  // change to 

但是,我真的很想使用 groovy 函数 call(name) 来解决它

于 2016-06-14T06:08:30.087 回答