2009-01-08 10 views
2

Après avoir examiné cette question:Ruby Object Accès membres: Comment ça c'est fait?

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

J'ai une question connexe. Je suis relativement nouveau à Ruby, donc j'espère que c'est clairement évidente. J'ai ce que je crois être un objet Ruby, généré à partir de la bibliothèque MIME :: Types. Je cherche à obtenir un type de fichier simple pour un fichier particulier. Voici ce qui se passe dans 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 

Ma compréhension est que je devrais être en mesure d'accéder aux propriétés de cet objet en utilisant la syntaxe à point - en fait, la page que j'appris de (http://mime-types.rubyforge.org/) indique exactement cela! Alors comment se fait-il que j'obtienne une erreur "no method" à la place? J'ai essayé toutes sortes d'autres syntaxes, mais pas de chance. Merci d'avance, Aaron.

Répondre

8

MIME::Types renvoie un tableau de MIME::Type objets. Ces objets répondent comme vous l'auriez prévu.

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

méthode Ruby class est utile pour le diagnostic de ce type de problème.

>> puts text.class 
array 
=> nil 

Vous pouvez également utiliser la méthode methods pour obtenir une liste complète des méthodes de l'objet répond.

+0

En outre, l'erreur elle-même a indiqué qu'il s'agissait d'un tableau: "NoMethodError: méthode non définie' media_type "pour # " –

Questions connexes