2 votes

Accès aux membres des objets Ruby : Comment ça marche ?

Après avoir examiné cette question :

Comment afficher les champs d'un objet sur la console ?

J'ai un problème connexe. Je suis relativement novice en Ruby, donc j'espère que c'est aveuglant d'évidence. 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

D'après ce que j'ai compris, je devrais pouvoir accéder aux propriétés de cet objet en utilisant la syntaxe point -- en fait, la page sur laquelle j'ai appris cela ( http://mime-types.rubyforge.org/ ) affirme 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 sans succès.

Merci d'avance, Aaron.

8voto

Gordon Wilson Points 14721

MIME::Types renvoie un tableau de MIME::Type objets. Ces objets réagissent comme on peut s'y attendre.

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

Ruby's class est utile pour diagnostiquer ce type de problème.

>> puts text.class
array
=> nil

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X