2010-10-08 8 views
0

donc j'essaie d'écrire un programme de minuteur simple dans ruby. J'ai défini mes méthodes dans une classe "Timer" mais quand je les appelle, cela me donne un NoMethodError. Des idées pourquoi? Merci pour l'aide.Créer une méthode dans une classe et l'utiliser dans Ruby

require "Time" 
class Timer 

def start 
    $a = Time.now 

end 

def stop 
Time.now - $a 
end 

end 

puts "Type in 'Start'to to start the timer and then type 'Stop' to stop it" 
s = gets.start 
st = gets.stop 
puts st 

Répondre

1

Vous envoyez start et stop à la valeur de retour de gets, qui est une chaîne, pas une minuterie.

De même, vous devez utiliser des variables d'instance plutôt que des globales pour conserver la valeur du temporisateur. Et vous devrez également créer une instance de Timer (ou transformer Timer dans un module, mais utiliser une variable d'instance même alors, pas un global).

+0

Est-ce que "$" ne crée pas de variable d'instance? Je pourrais avoir juré "@" fait un mondial. Et comment créer une "instance de minuterie"? vous devriez également noter que je suis un débutant complet, donc si je sonne comme l'un de ses causes je suis :) –

+0

@bipolarpants: Vous l'avez en arrière. '@ foo' est une variable d'instance,' $ foo' est un global. Et ne vous inquiétez pas d'être nouveau - tout le monde est à un moment ou un autre. – Chuck

+0

oh ok cool, merci. Maintenant je l'ai eu pour travailler mais j'ai dû créer une méthode dans la classe String "class String def to_t Timer.new end" puis l'ajouter à "s = gets.to_t.start" comme ça. Y a-t-il un moyen de contourner cela? –

0

On dirait que vous n'initialisez pas un objet de classe. Donc soit vous avez besoin d'une méthode d'initialisation, soit vous pouvez référencer la classe dans les méthodes.

par exemple

class Timer 

def self.start 
    $a = Time.now 
end 

def self.stop 
    Time.now - $a 
end 


end 
Questions connexes