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