web-dev-qa-db-ja.com

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が構築されており、このリストをメソッドで期待されるvarargsに変換する方法を理解しようとしています。

「、」と連結されたStringへの変換は、これが無効な電子メールアドレスであるため機能しません。リストを繰り返し処理して各メールを個別に送信する必要がないように、各リストアイテムを個別のパラメーターに分割できる必要があります。

24
Conor Power

おそらくスプレッド演算子、*、あなたが探しているものです:

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

56
epidemian