2013-01-22 19 views
21

Tôi đang sử dụng một plugin cung cấp chức năng email như sau:Groovy chuyển đổi từ Danh sách để var args cho phương pháp gọi

class SendSesMail { 

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

} 

Các tài liệu khẳng định lớp được gọi như sau:

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

Trong mã số List của các địa chỉ được xây dựng và tôi đang cố gắng tìm ra cách chuyển đổi danh sách này thành var args theo dự kiến.

Chuyển đổi thành một String được ghép bằng "," không hoạt động vì đây là địa chỉ email không hợp lệ. Tôi cần có thể tách từng mục trong Danh sách thành một tham số riêng biệt để tránh phải lặp qua Danh sách và gửi từng email riêng lẻ.

+0

Bạn có gặp lỗi với mã ở trên không? –

Trả lời

43

Có lẽ các nhà điều hành lây lan, *, là những gì bạn đang tìm kiếm:

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] 

Chú ý rằng các dấu ngoặc đơn vào các cuộc gọi phương pháp để to là bắt buộc, vì nếu không to *emails sẽ được phân tích như một phép nhân. Lựa chọn sai ký hiệu ngữ pháp quá tải IMO = P

+0

Tôi chưa bao giờ thấy toán tử lan truyền được sử dụng trong ngữ cảnh đó và tôi không thể làm cho nó hoạt động trong một ví dụ đơn giản - bạn có thể chỉ ra một số ví dụ khác về việc sử dụng nó không? – SteveD

+0

Không nên mã trong câu hỏi chạy vì nó là anyway (không có nhà điều hành lây lan)? ví dụ: try: 'def a (String ... p) {p.each {println it}}; a 'a', 'b', 'c'' –

+0

@tim_yates Có. Nhưng i _think_ OP có nghĩa là đoạn mã đó là từ tài liệu và những gì anh ta muốn làm là gọi phương thức với các đối số xuất phát từ Danh sách. – epidemian

Các vấn đề liên quan