Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k views
in Technique[技术] by (71.8m points)

ruby - `-': nil can't be coerced into Fixnum (TypeError)

In my program Im getting an error which says ./ruby_camping.rb:91:in `-': nil can't be coerced into Fixnum (TypeError). What I would like to do is to checkout a guest that I have just checked in. Here is the block of code for the checkout part:

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

How come departureDate still is nil? Thankful for help!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

To get a more detailed answer, you would have to indicate which line was line 91 in your program. However to point you in the right direction, if you're seeing nil can't be coerced into Fixnum then it means something on the right hand side of a - is nil. e.g.

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

From your code the only possible example of this I can see is guestStayedDays = departureDate - guest.arrived so I would check the value of guest.arrived.

If something on the left hand side of a - were nil e.g. departureDate or plot then you would get undefined method '-' for nil:NilClass instead.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...