繁体   English   中英

使用Mail gem从块内部访问变量

[英]Accessing variables from inside a block with Mail gem

我在访问某些变量的内容时遇到问题。 我正在使用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访问变量,我想这将是一个类问题。

给定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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM