0

我正在使用 MailFactory 发送电子邮件,并遇到了我以前从未见过的奇怪条款。我来自 PHP,现在已经做 Ruby 大约一个半星期了。

是| smtp | 变量 Net::SMTP.start 返回的值,然后在 {} 块中使用?

response = Net::SMTP.start(cfg['host'], 25, cfg['from_domain'], cfg['username'], cfg['password'], :plain) {
    | smtp |
    recipients = cfg['mail_targets']['errors']
    smtp.send_message(mail.to_s, mail.from, [recipients, mail])
}
4

4 回答 4

1

start这是从块中传递的参数。

当使用块调用此方法时,新启动的 SMTP 对象将让给块,并在块调用完成后自动关闭。否则,调用者有责任在完成时关闭会话。

http://apidock.com/ruby/Net/SMTP

于 2013-02-27T14:29:09.620 回答
1

smtp是传递到块中的参数的名称。语法是{ |smtp| <code> }Ruby 块语法。

http://www.martinfowler.com/articles/simpleRuby.html

于 2013-02-27T14:29:28.350 回答
1

是的,格式有点奇怪(通常块变量在“{”旁边),但您正在使用块内的 Net::SMTP 实例。

http://ruby-doc.org/stdlib-2.0/libdoc/net/smtp/rdoc/Net/SMTP.html

于 2013-02-27T14:30:09.437 回答
1

这称为块。

网络::SMTP::开始:http ://ruby-doc.org/stdlib-2.0/libdoc/net/smtp/rdoc/Net/SMTP.html#method-c-start

更多关于红宝石块:http ://c2.com/cgi/wiki?BlocksInRuby

于 2013-02-27T14:37:00.273 回答