Une petite découverte à propos de Ruby

Je codais tranquillement hier soir (la lecture des bookmarks Opera, pour être précis. D’ailleurs, je lis aussi les favoris d’IE), quand j’ai commencé à subir un angoissant problème : j’ai une classe Bookmark qui contient ça :

def to_s(_deepness = 0)
    "t"*_deepness+attributes.inspect
end

et une classe Folder, qui hérite de Bookmark, qui contient ça

def to_s(_deepness = 0)
     returned = super.to_s(_deepness) # cette ligne plante
     @bookmarks.each do |bookmark|
             returned += "n"+bookmark.to_s(_deepness+1)
     end
     returned
end

Alors, pourquoi le super.to_s plante ? Parce qu’en Ruby, tout est objet. Y compris une méthode. Donc, d’après ce que je comprend, super ne se réfère pas à l’objet courant vu comme un Bookmark, mais à la méthode courante vue comme une méthode de Bookmark. Du coup, si je remplace la ligne incriminée par returned = super(_deepness) Ca marche. C’est fou, non ?

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s