我还是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]
也不起作用。
谢谢!
答案 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