2

使用Ruby Gem 'Mail'时,我对如何在不初始化对象的情况下存储变量感到困惑?例如:

Mail.defaults do
  retriever_method :pop3, :address    => "pop.gmail.com",
                          :port       => 995,
                          :user_name  => '<username>',
                          :password   => '<password>',
                          :enable_ssl => true
end

之后,您可以调用方法,例如Mail.first并让它返回邮箱中配置的默认值的第一条消息。

我意识到 Ruby 中的一切都是一个对象,甚至是一个类,所以当require 'mail'被调用时,一个包含class Mail实际创建的对象是否对程序可用?这里到底发生了什么?

4

1 回答 1

1

的内容mail.rb被加载到具有该require 'mail'语句的文件中。

查看 gem 后,mail.rb包含Mail模块,该模块又包含许多其他要求语句。

邮件.rb

module Mail
  ## skipped for brevity

  # Finally... require all the Mail.methods
  require 'mail/mail'
end

邮件/mail.rb

module Mail
  ## skipped for brevity

  # Receive the first email(s) from the default retriever
  # See Mail::Retriever for a complete documentation.
  def self.first(*args, &block)
    retriever_method.first(*args, &block)
  end
end

因此,这些方法可用于您的程序。

于 2012-09-07T18:09:27.013 回答