2010-08-04 18 views
6

En mi programa Obtengo un error que dice ./ruby_camping.rb:91:in` -': nil no se puede forzar en Fixnum (TypeError) Lo que me gustaría hacer es a la caja de un invitado que acabo registrado aquí es el bloque de código para la parte de la caja:.`- ': nil no se puede forzar en 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 

¿Cómo es que todavía DepartureDate es nulo? Agradecido por la ayuda!

Respuesta

23

Para obtener una respuesta más detallada, debe indicar qué línea era la línea 91 en su programa. Sin embargo, para apuntarlo en la dirección correcta, si está viendo nil can't be coerced into Fixnum, significa que algo en el lado derecho de - es nil. p.ej.

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

Desde su código la única posible ejemplo de esto puedo ver es guestStayedDays = departureDate - guest.arrived así que sería comprobar el valor de guest.arrived.

Si algo en el lado izquierdo de un - era nil p. Ej. departureDate o plot, entonces obtendría undefined method '-' for nil:NilClass en su lugar.

+0

Sí, usted es la línea correcta 91 puntos a: guestStayedDays = departureDate - guest.arrived. Tu respuesta confirma entonces mi sospecha. Entonces, ¿el valor debe ser nulo, supongo? – Sebastien

+1

Correcto. Del error que estás viendo debe ser 'guest.arrived' que es' nil'. 'guest' no es' nil' porque estás llamando 'arrive' con éxito, y' departureDate' no es 'nil' porque estás llamando' -' a eso con éxito. Es el argumento para '-' (' guest.arrived' ese es el problema). – mikej

+0

Gracias, mikej por sus respuestas. Trataré de ver si puedo resolver esto de alguna manera. – Sebastien

Cuestiones relacionadas