Ruby Object会员访问:如何完成?

时间:2009-01-08 02:34:30

标签: ruby-on-rails ruby

看了这个问题:

How do I dump an object's fields to the console?

我有一个相关的问题。我对Ruby比较陌生,所以希望这很明显。我有我认为是从MIME :: Types库生成的Ruby对象。我希望得到一个特定文件的简单文件类型。这是在irb中发生的事情:

>> require 'mime/types'
=> ["MIME"]
>> text = MIME::Types['text/plain; charset=us-ascii']
=> [#<MIME::Type:0x2483ee0 @simplified="text/plain", @obsolete=nil, @raw_media_type="text", @content_type="text/plain", @system=nil, @registered=true, @url=["RFC2046", "RFC3676"], @media_type="text", @encoding="quoted-printable", @sub_type="plain", @raw_sub_type="plain", @extensions=["txt", "asc", "c", "cc", "h", "hh", "cpp", "hpp", "dat", "hlp"]>, #<MIME::Type:0x2476024 @simplified="text/plain", @obsolete=nil, @raw_media_type="text", @content_type="text/plain", @system=/vms/, @registered=true, @url=nil, @media_type="text", @encoding="8bit", @sub_type="plain", @raw_sub_type="plain", @extensions=["doc"]>]
>> puts text.media_type
NoMethodError: undefined method `media_type' for #<Array:0x2483af8>
    from (irb):4

我的理解是我应该能够使用点语法访问这个对象的属性 - 事实上,我从(http://mime-types.rubyforge.org/)学到的这个页面就是这样说的!那么为什么我会得到一个“无方法”错误呢?我尝试了各种其他语法,但没有运气。

提前致谢, 亚伦。

1 个答案:

答案 0 :(得分:8)

MIME::Types返回MIME::Type个对象的数组。这些对象会像您期望的那样响应。

>> puts text[0].media_type
text
=> nil

Ruby的class方法对于诊断此类问题非常有用。

>> puts text.class
array
=> nil

您还可以使用methods方法获取对象响应的方法的完整列表。