2013-01-22 55 views
21

我使用一個插件,提供電子郵件功能如下:Groovy中從列表轉換爲變參的方法調用

class SendSesMail { 

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

} 

文檔狀態的類被稱爲如下:

sesMail { 
    from "[email protected]" 
    replyTo "[email protected]" 
    to "[email protected]", "[email protected]", "[email protected]" 
    subject "Subject" 
    html "Body HTML" 
} 

在代碼List的地址是建立起來的,我想弄清楚如何將這個列表轉換爲該方法所期望的var args。

轉換爲String與「,」連接不起作用,因爲這是一個無效的電子郵件地址。我需要能夠將每個List項目分離爲一個單獨的參數,以避免迭代List並單獨發送每封電子郵件。

+0

您是否收到上述代碼的錯誤? –

回答

43

可能蔓延運營商,*,是你在找什麼:

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

def emails = ["[email protected]", "[email protected]", "[email protected]"] 
to(*emails) 
// Output: 
// Sending email to: [email protected] 
// Sending email to: [email protected] 
// Sending email to: [email protected] 

注意在方法調用的括號to是強制性的,否則將to *emails被解析爲一個乘法。語法符號超負荷的錯誤選擇IMO = P

+0

我從來沒有見過在這種情況下使用傳播運算符,我不能讓它在一個簡單的例子中工作 - 你能指出一些使用它的其他例子嗎? – SteveD

+0

問題中的代碼不應該像原來那樣運行(沒有擴展運算符)?例如:try:'def a(String ... p){p.each {println it}}; a','b','c'' –

+0

@tim_yates是的。但我認爲OP意味着該代碼片段來自文檔,他想要做的是使用來自List的參數調用該方法。 – epidemian