2012-09-07 45 views
2

使用Ruby Gem 'Mail',我很困惑如何在不初始化對象的情況下存儲變量?例如:存儲變量而不初始化對象? 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的對象實際上是否已創建並且可供程序使用?到底發生了什麼?

回答

1

mail.rb的內容加載到具有require 'mail'語句的文件中。

查看寶石後,mail.rb包含Mail模塊,該模塊又包含許多其他require語句。

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 

所以後來的方法是提供給您的程序。

+0

包含類Mail的對象實際上是否已創建並可供程序使用?到底發生了什麼? 「因此,mail.rb將包含郵件類並使其可用於當前文件。」,什麼是_current file_? 'mail'類,你的意思是'Mail'? – rudolph9

+0

'load'和'require'之間的區別與這個問題是不相關的......你能否在正在運行的程序中描述你的答案。 – rudolph9

+0

編輯答案,如果不是你要找的,我不認爲我正確理解這個問題。 – veritas1