2010-08-04 7 views
6

Dans mon programme Im obtenir une erreur qui dit ./ruby_camping.rb:91:in` -': nul ne peut être forcé dans Fixnum (TypeError). Ce que je voudrais faire est à la caisse un invité que je viens de vérifier est ici le bloc de code pour la partie de la caisse.`- ': nul ne peut être contraint dans Fixnum (TypeError)

def self.check_out 
    puts "Welcome to checkout!" 
    puts $camping.current_guests 
    puts " Here are the current guests, who do you want to checkout?!" 
    puts "State plot number " 
    plot = gets.chomp.to_i 
    guest = $camping.current_guests[plot-1] 
    puts "State the date for your checkout (a number bigger then " + guest.arrived.to_s + "): " 
    # it should not be possible for a guest to checkout before she has checked in 
    departureDate = gets.chomp.to_i 
    guestStayedDays = departureDate - guest.arrived #Days the guest has stayed 
    while (guestStayedDays < 1) do       
    puts "The date for checkout is not valid. The guest checked in " + guest.arrived.to_s 
    puts "Please state a new date." 
    departureDate = gets.chomp.to_i 
    guestStayedDays = departureDate - guest.arrived 
    end  
    guest.departure = departureDate 
    guest.plot.increase(guestStayedDays) # increases the electricity meter 
    puts guest # prints the guest 
    $camping.current_guests[plot-1] = nil # emptys the plot 
end 
end 

Comment se departureDate est encore nul? Reconnaissant de l'aide!

Répondre

23

Pour obtenir une réponse plus détaillée, vous devez indiquer quelle ligne correspond à la ligne 91 de votre programme. Cependant, pour vous diriger dans la bonne direction, si vous voyez nil can't be coerced into Fixnum alors cela signifie que quelque chose sur le côté droit d'un - est nil. par exemple.

irb(main):001:0> 5 - nil 
TypeError: nil can't be coerced into Fixnum 
     from (irb):1:in `-' 
     from (irb):1 

A partir de votre code le seul exemple possible de ce que je peux voir est guestStayedDays = departureDate - guest.arrived donc je vérifier la valeur de guest.arrived.

Si quelque chose sur le côté gauche d'un - ont été nil par exemple. departureDate ou plot alors vous obtiendrez undefined method '-' for nil:NilClass à la place.

+0

Oui, vous avez la bonne ligne 91 points à: guestStayedDays = departureDate - guest.arrived. Votre réponse confirme alors ma suspicion. Alors, la valeur doit être nulle, je suppose? – Sebastien

+1

Correct. De l'erreur que vous voyez, il doit s'agir de 'guest.arrived' qui est' nil'. 'guest' n'est pas' nil' parce que vous appelez 'arrived' avec succès, et' departureDate' n'est pas 'nil' parce que vous appelez' -' avec succès. C'est l'argument de '-' (' guest.arrived' c'est le problème.) – mikej

+0

Merci mikej pour vos réponses. Je vais essayer de voir si je peux résoudre cela d'une manière ou d'une autre. – Sebastien

Questions connexes