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 回答