0

一部の変数のコンテンツへのアクセスに問題があります。私はMail gemを使用しており、次のコードがあります。

class Email
  attr_accessor :server, :port, :username, :password, :ssl

  def check_mail
    # puts server --->  imap.googlemail.com ---> work
    Mail.defaults do
      # puts server --->  nil ---> not work
      retriever_method :imap, address:     server, #---> obviously not work
                                 port:       port,
                            user_name:   username,
                             password:   password,
                           enable_ssl:    ssl
    end
  end
end

def account
 acc          = Email.new
 acc.server   = 'imap.googlemail.com'
 acc.port     = '993'
 acc.username = 'xxx'
 acc.password = 'xxx'
 acc.ssl      = 'true'

 acc.check_mail
end

内から変数にアクセスできませんMail.default do。クラスの問題になると思います。

4

1 に答える 1

2

与えられたブロックMailが別のコンテキストで実行され、変数がそのスコープで使用できない可能性があります。これは、Ruby で記述された特定の「ドメイン固有言語」(DSL) で発生することがあります。

使用したいデータを橋渡しする必要があります。構成の名前空間を作成すると、これが可能になります。

 Mail.defaults do
   retriever_method :...,
     :address => MyModule.address,
     # ...
 end

mattr_accessorそれらのモジュールは、それがあれば簡単に作成できます。

これを達成するためにある種の閉鎖を使用することも可能かもしれません:

this = self

Mail.defaults do
  retriever_method :...,
    :address => this.address,
    # ...
end
于 2013-01-23T23:12:58.983 に答える