Ру Нуби здесь. У меня есть класс Login
, который входит в gmail, используя библиотеку net/IMAP
. Происходит то, что я создаю новый экземпляр этого класса, например:
a = Login.new("username", "gmail.com", "passw")
Затем я работаю над другими классами, которые будут делать кое-что с почтовым ящиком. Проблема в том, что переменная @imap
, которую я определил в Login, кажется, исчезла (я полагаю, из-за области видимости).
Вот как @imap
объявляется в классе Login: @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
плохой практикой? Так запутался, держу пари, что ответ тоже очень прост и очевиден, но я просто его не вижу. Спасибо!