RuNubie这里。我有一个类Login
,它使用net/IMAP
库登录到Gmail。正在发生的事情是,我创建一个新的实例类,如:ruby可变范围跨类
a = Login.new("username", "gmail.com", "passw")
然后,我工作的其他类,会做一些“东西”与该邮箱。问题是我在Login中定义的@imap
变量似乎已经消失了(由于我设想的范围)。
这是@imap
如何在登录类中声明: @imap = Net::IMAP.new('imap.gmail.com',993,true,nil,false)
所以这个:
@today = Date.today
@received_today = imap.search(["SINCE", @today.strftime("%d-%b-%Y")]).count.to_s
...返回一个错误。这些是我在玩这个时遇到的两个错误。第一种是当我使用imap
,第二个是当我尝试@imap
:
NameError: undefined local variable or method `imap' for #<Object:0x10718d2a8>
NoMethodError: undefined method `search' for nil:NilClass
哪些应对这样的情况下最好的做法是什么?是唯一的解决方案来定义我的方法,在创建Net :: IMAP的新实例的同一个类中执行“东西”?是宣布@imap
作为一个全球变量$imap
不好的做法?很困惑,我敢打赌,答案非常简单明显,但我只是没有看到它。谢谢!
谢谢!这是有道理的,所以基本上类User的实例被作为参数传递给OtherOne类的some_method,看起来像。我担心这种方式每当另一个类调用类User时,Net :: IMAP登录并验证邮箱。似乎它可能会变慢,如果许多其他类/方法不断试图“做东西”的邮箱,并且每次都必须登录。这听起来像是基于你的回答,没有办法只用net/IMAP登录并保持打开状态。 – krapdagn 2012-03-02 05:42:26
@krapdagn:Net :: IMAP。new'只会被每个用户调用一次,之后'imap'只返回现有的'@ imap'。如果'@ imap'被断开连接,你可能需要重新连接一些逻辑。 – 2012-03-02 05:54:22