【问题标题】:Storage of variables without initializing an object? Ruby Gem 'Mail'在不初始化对象的情况下存储变量?红宝石“邮件”
【发布时间】:2012-09-01 15:00:16
【问题描述】:

使用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 的对象是否真的被创建并疯狂地可供程序使用?这里到底发生了什么?

【问题讨论】:

    标签: ruby class object initializer


    【解决方案1】:

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

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

    ma​​il.rb

    module Mail
      ## skipped for brevity
    
      # Finally... require all the Mail.methods
      require 'mail/mail'
    end
    

    ma​​il/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
    

    那么这些方法就可以在你的程序中使用了。

    【讨论】:

    • 包含 Mail 类的对象是否真的被创建并疯狂地可供程序使用?这里到底发生了什么? “所以 mail.rb 将包含邮件类并使其可用于当前文件。”,当前文件是什么? mail类,你的意思是Mail吗?
    • loadrequire 之间的区别与这个问题无关...你能在运行程序的上下文中说出你的答案吗?
    • 已编辑的答案,如果不是您要找的,我认为我没有正确理解这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2012-07-09
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多