Доступ к элементу Ruby Object: как это сделать? - PullRequest
2 голосов
/ 08 января 2009

Посмотрев на этот вопрос:

Как вывести дамп полей объекта в консоль?

У меня есть связанная проблема. Я относительно новичок в Ruby, так что, надеюсь, это очевидно. У меня есть то, что я считаю объектом Ruby, сгенерированным из библиотеки MIME :: Types. Я ищу, чтобы получить простой тип файла для конкретного файла. Вот что происходит в 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 Ответ

8 голосов
/ 08 января 2009

MIME::Types возвращает массив MIME::Type объектов. Эти объекты реагируют так, как вы ожидаете.

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

Метод Ruby class полезен для диагностики этого типа проблемы.

>> puts text.class
array
=> nil

Вы также можете использовать метод methods для получения полного списка методов, на которые отвечает объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...