В моей программе я получаю ошибку, которая говорит что./ruby_camping.rb:91:in '-': ноль не может быть принужден в 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
Каким образом departureDate все еще является нолем? Благодарный за справку!
Чтобы получить более подробный ответ, вам нужно указать, какая строка была строкой 91 в вашей программе. Однако, чтобы указать вам правильное направление, если вы видите, что nil нельзя принудительно преобразовать в Fixnum
, то это означает что-то в правой части -
равно nil
. например
irb(main):001:0> 5 - nil
TypeError: nil can't be coerced into Fixnum
from (irb):1:in `-'
from (irb):1
Из вашего кода я могу видеть единственный возможный пример этого: guestStayedDays = leaveDate - guest.arhibited
, поэтому я бы проверил значение guest.arhibited
.
Если что-то в левой части из -
было ноль
, например ОтправительДата
или график
, тогда вместо этого вы получите undefined метод '-' для nil: NilClass
.