Groovy从List转换为var args进行方法调用

Con*_*wer 24 groovy list variadic-functions

我正在使用一个提供电子邮件功能的插件,如下所示:

class SendSesMail {

    //to
    void to(String ... _to) { 
        this.to?.addAll(_to)
        log.debug "Setting 'to' addresses to ${this.to}"
    }

}
Run Code Online (Sandbox Code Playgroud)

文档声明该类的调用如下:

sesMail {
    from "from@a.com"
    replyTo "reply@a.com"
    to "t@a.com", "t@b.com", "t@c.com"
    subject "Subject"
    html "Body HTML"
}
Run Code Online (Sandbox Code Playgroud)

在代码List中建立了一个地址,我试图找出如何将此列表转换为该方法所期望的var args.

转换为String与","连接不起作用,因为这是一个无效的电子邮件地址.我需要能够将每个List项分成一个单独的参数,以避免迭代List并单独发送每封电子邮件.

epi*_*ian 54

您可能*正在寻找传播运算符:

def to(String... emails) {
    emails.each { println "Sending email to: $it"}
}

def emails = ["t@a.com", "t@b.com", "t@c.com"]
to(*emails)
// Output: 
// Sending email to: t@a.com
// Sending email to: t@b.com
// Sending email to: t@c.com
Run Code Online (Sandbox Code Playgroud)

请注意,方法调用的括号to是必需的,否则to *emails将被解析为乘法.重载语法符号的错误选择IMO = P.