2009-09-25 3 views
2

Je crée une classe de temps très limitée dans laquelle je veux utiliser la méthode parse de la classe Time. Donc, je me retrouve avec quelque chose comme ça ...Comment puis-je dupliquer un nom de classe de base Ruby et toujours utiliser cette classe de base dans ma classe?

class Time 
    def parse(str) 
     @time = # I want to use Time.parse here 
    end 
end 

Comment puis-je sortir de ma classe de temps nouvellement défini et accéder au temps noyau classe sans renommer ma classe?

+1

Juste une simple note, analyse syntaxique est un singleton méthode (classe) ainsi lors de la définition qu'il vous devez utiliser def self.parase not defined Parse – khelll

+0

Ended de travailler quand je suis passé à une méthode de classe (il fallait aussi changer 'time' pour charger 'time' dans mon time_spec pour RSpec). Merci! – cfeduke

Répondre

6
require 'time' 
class Time 
#Opening the singleton class as Time.parse is a singleton method 
    class << self 
    alias_method :orig_parse, :parse 
    def parse(str) 
     @time = orig_parse str 
    end 
    end 
end 

Maintenant, vous pouvez toujours faire référence à l'ancienne méthode parse utilisant Time.orig_parse

+0

Hmm ouais c'est essentiellement ce que j'ai, mais RSpec se plaint que 'parse' est une méthode indéfinie pour 'Time' quand j'essaie de lancer ma spécification. – cfeduke

+0

Ignorer mon dernier, juste rafraîchi, va essayer ça. – cfeduke

+0

C'est parce que vous devez exiger 'temps' – khelll

Questions connexes