比Ruby访问少两倍

时间:2011-07-08 18:12:51

标签: ruby-on-rails ruby

我还是Ruby的新手,想知道如何访问存储在“double less than”结构中的数据元素:

@email << {:envelope => envelope, :body => body}

如果我这样做

<% @results.email.each do |result| %>

  <%= result %>

<% end %>

我得到了

bodyTEST TEST envelope#<struct Net::IMAP::Envelope date="Tue, 28 Jun 2011 09:20:35 -0700", subject="TEST TEST", from=[#<struct Net::IMAP::Address name="Some Name", route=nil, mailbox="someinbox", host="somehost.com">], sender=[#<struct Net::IMAP::Address name="Somename", route=nil, mailbox="somebox", host="somedomaincom">], reply_to=[#<struct Net::IMAP::Address name="SomePerson", route=nil, mailbox="somemailbox", host="somehost.com">], to=[#<struct Net::IMAP::Address name=nil, route=nil, mailbox="thisinbox", host="somehost.com">], cc=nil, bcc=nil, in_reply_to=nil, message_id="<C4427977-8A42-46E4-ADB4-1AE88ED9CCDE@mehost.com>">

如何访问每个元素,如正文,信封,发件人(在信封内)? result.body不起作用,result[body]也不起作用。

谢谢!

2 个答案:

答案 0 :(得分:2)

您应该使用result[:body]而不是result[body]body是变量,而:body是符号(类似于字符串)。

请注意,您已使用符号将值存储在哈希中。 {:envelope => envelope; :body => body}将变量envelope的内容(右侧的内容)存储为密钥:envelope的值(body:body的内容相同})。

注意:这是关于符号与字符串 - http://www.robertsosinski.com/2009/01/11/the-difference-between-ruby-symbols-and-strings/

的不同之处

答案 1 :(得分:1)

@email << {:envelope => envelope, :body => body}

只是将哈希值添加到@email变量中。如果它是Array,那么您要添加一个元素,否则,它取决于#<<方法的实现。要访问元素,请使用哈希查找语法:

result[:envelope] #=> returns the envelope object
result[:envelope].sender #=> returns the envelopes sender 
result[:body] #=> returns the body