RuNubieはこちら。私はnet/IMAP
ライブラリを使ってgmailにログインするクラスLogin
を持っています。私がメールボックスにいくつかの「もの」を行います他のクラスに取り組んでいます、そして、ルビ変数のスコープがクラスを超えて
a = Login.new("username", "gmail.com", "passw")
:何が起こっていることは、私のような、そのクラスの新しいインスタンスを作成することです。問題は、ログインで定義した@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
は...エラーを返します。これらは私がこれで周りを遊んでいる間に得た2つのエラーです。私はimap
を使用するときに最初の1があり、もう一つは、私は@imap
をしようとすると、次のとおりです。
NameError: undefined local variable or method `imap' for #<Object:0x10718d2a8>
NoMethodError: undefined method `search' for nil:NilClass
このような状況に対処するためのベストプラクティスは何ですか?私がNet :: IMAPの新しいインスタンスを作成しているクラスと同じクラスで「やる」メソッドを定義する唯一のソリューションですか? をグローバル変数$imap
として悪い習慣と宣言していますか?とても混乱していますが、答えは非常にシンプルで明白ですが、私はそれを見ていません。ありがとう!
ありがとう!これは理にかなっているので、基本的にクラスUserのインスタンスは、OtherOneクラスのsome_methodに引数として渡されます。私はこのように、別のクラスがクラスUserを呼び出すたびにNet :: IMAPがログインし、メールボックスを認証することに懸念しています。多くの他のクラス/メソッドがメールボックスに "やる"ことを試み続けて、毎回ログインしなければならない場合、遅くなるかもしれないようです。あなたの答えに基づいて、net/IMAPでログインしてオープンにする方法はないように思えます。 – krapdagn
@krapdagn: 'Net :: IMAP。'new'はユーザごとに一度だけ呼び出され、' imap'は既存の '@imap'を返します。 '@imap'が切断されると、いくつかのロジックを再接続させたいかもしれません。 –