PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.ruby > Call overwritten method of included module?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Call overwritten method of included module?

Réponse
 
LinkBack Outils de la discussion
Vieux 23/11/2007, 00h21   #1
Joshua Muheim
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Call overwritten method of included module?

Hi all

module MyModule
def my_method
return "my module rocks!"
end
end

class MyClass
include(MyModule)

def my_method
return "my class rocks!"
end
end

Is there a way to call MyModule::my_method from within MyClass? "super"
sadly doesn't work...

Thanks a lot
Josh
--
Posted via http://www.ruby-forum.com/.

  Réponse avec citation
Vieux 23/11/2007, 02h33   #2
Morton Goldberg
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Call overwritten method of included module?

On Nov 22, 2007, at 6:21 PM, Joshua Muheim wrote:

> Hi all
>
> module MyModule
> def my_method
> return "my module rocks!"
> end
> end
>
> class MyClass
> include(MyModule)
>
> def my_method
> return "my class rocks!"
> end
> end
>
> Is there a way to call MyModule::my_method from within MyClass?
> "super"
> sadly doesn't work...


Perhaps this will do:

<code>
module MyModule
def my_method
"my module rocks!"
end
end

class MyClass
include MyModule
alias module_method my_method
def my_method
"#{module_method}\nmy class rocks!"
end
end

puts MyClass.new.my_method
</code>

<result>
my module rocks!
my class rocks!
</result>

Regards, Morton



  Réponse avec citation
Vieux 23/11/2007, 03h30   #3
Daniel Sheppard
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Call overwritten method of included module?

> module MyModule
> def my_method
> return "my module rocks!"
> end
> end
>=20
> class MyClass
> include(MyModule)
>=20
> def my_method
> return "my class rocks!"
> end
> end
>=20
> Is there a way to call MyModule::my_method from within=20
> MyClass? "super"
> sadly doesn't work...


You'd need to alias the old method:

class MyClass
include(MyModule)
alias ld_my_method :my_method
def my_method
old_my_method
end
end

(If you're using rails/activesupport, you'd probably use
alias_method_chain to simplify things)

Dan.

  Réponse avec citation
Vieux 23/11/2007, 13h22   #4
Joshua Muheim
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Call overwritten method of included module?

> (If you're using rails/activesupport, you'd probably use
> alias_method_chain to simplify things)
>
> Dan.


Thanks! Especially for the alias_method_chain hint! :-)
--
Posted via http://www.ruby-forum.com/.

  Réponse avec citation
Vieux 23/11/2007, 13h31   #5
Robert Dober
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Call overwritten method of included module?

On Nov 23, 2007 12:21 AM, Joshua Muheim <forum@josh.ch> wrote:
> Hi all
>
> module MyModule
> def my_method
> return "my module rocks!"
> end
> end
>
> class MyClass
> include(MyModule)
>
> def my_method
> return "my class rocks!"
> end
> end
>
> Is there a way to call MyModule::my_method from within MyClass? "super"
> sadly doesn't work...

super shall work and indeed does
module MyModule
def my_method
return "my module rocks!"
end
end

class MyClass
include(MyModule)

def my_method

return [ super, "my class rocks!" ].join("\n")
end
end

puts MyClass.new.my_method

HTH
Robert
>
> Thanks a lot
> Josh
> --
> Posted via http://www.ruby-forum.com/.
>
>




--
what do I think about Ruby?
http://ruby-smalltalk.blogspot.com/

  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 13h48.


Édité par : vBulletin®
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,54864 seconds with 13 queries