【发布时间】:2012-03-18 05:45:46
【问题描述】:
我是 Ruby 新手,对这段代码中的 grep 命令有点困惑。我试图通过 Net::IMAP 收集所有邮箱名称,然后根据邮箱参数检查它们。邮箱名称可能只包含部分参数。例如,有人可能输入“Sent”作为邮箱,但很多时候邮箱名称将是“INBOX.Sent”。
class ExamineMail
def initialize(user, domain, pass, box)
@username = user
@domain = domain
@pass = pass
@mailbox = box
end
def login()
@imap = Net::IMAP.new("mail." + @domain)
@imap.authenticate('LOGIN', @username + "@" + @domain, @pass)
mailbox_array = @imap.list('','*').collect{ |mailbox| mailbox.name }
#mailbox_array.any? { |w| @mailbox =~ /#{w}/ }
mailbox_array.grep(/^@mailbox/)
end
end
所以,我首先尝试了 .any?但这并没有返回我实际邮箱的名称。使用.grep,我可以获得@mailbox = "INBOX" 时的邮箱列表。但是,当@mailbox = "Sent" 时,它只返回[]。
这是一个有效的示例(使用“INBOX”)和一个无效的示例(使用“Sent”):
#Get the list of inboxes
mailbox_array = imap.list('','*').collect{ |mailbox| mailbox.name }
=> ["INBOX", "INBOX.Trash", "INBOX.Sent", "INBOX.Sent Messages", "INBOX.Junk", "INBOX.Drafts", "INBOX.Deleted Messages", "INBOX.Apple Mail To Do"]
#Search for mailboxes including "Sent"
>> mailbox_array.grep(/^Sent/)
=> []
#Search for "INBOX"
>> mailbox_array.grep(/^INBOX/)
=> ["INBOX", "INBOX.Trash", "INBOX.Sent", "INBOX.Sent Messages", "INBOX.Junk", "INBOX.Drafts", "INBOX.Deleted Messages", "INBOX.Apple Mail To Do"]
我认为问题在于“INBOX”在数组中字符串的开头,但“Sent”在中间并且在一段时间之后。不知道如何解决。
【问题讨论】: