帮助` - ':nil不能被强制转换为Fixnum(TypeError)

时间:2010-08-05 14:54:31

标签: ruby

  

可能重复:
  `-': nil can’t be coerced into Fixnum (TypeError)

有谁知道guest.arrived怎么会是零?!这是我在程序中使用的结帐方法的一小部分。错误指向代码中第91行,这是该代码块的最后一部分:

departureDate = gets.chomp.to_i
guest.departure = departureDate
guestStayedDays = departureDate - guest.arrived # Days the guest have stayed 

我似乎无法弄清楚这一点。 get.chomp.to_i的问题是它返回nil吗?还是回归0?但话说再说那不会给我这个错误。那么客人是零还是实际上是组合客人。这是问题所在吗?值得一提的是,抵达是在我的签入方式中声明的,其中客人说明其到达日期。它以某种方式丢失了吗?

感谢您的回答,我将发布签到方法以及:

def self.check_in
    puts "Welcome to the checkin"
    puts "Please state your first name: "
    firstName = gets.chomp
    puts "Please state your last name:"
    lastName = gets.chomp
    puts "Write your address: "
    address = gets.chomp
    puts "and your phone number: "
    phone = gets.chomp
    puts "finally, your arrival date!"
    arrived = gets.chomp.to_i
    newPLot = $camping.generateParkingLot
    guest = Guest.new(firstName, lastName, address, phone, arrived)
    $camping.current_guests[newPLot-1] = guest
    $camping.all_guests.push(guest)   # lägg till gästen i historiken         

    puts "The registration was a success!! You have received plot " + newPLot.to_s + "."    
  end 

这里定义了到达的变量,当我在我的结账方法中放入$ camping.current_guests时,我会看到所有信息。谢谢!

2 个答案:

答案 0 :(得分:2)

你昨天已经问过这个完全相同的问题,答案仍然是完全相同的答案:问题是arrived guest方法}}返回nil,除非你实际上显示该方法的代码,否则任何人都无法做到。

答案 1 :(得分:0)

您的问题是guest.arrived正在返回nil。

  • 如果guestnil,那么第90行就会出现错误

    NoMethodError: undefined method `departure=' for nil:NilClass
    
  • 如果departureDatenil,那么您在第91行上会收到错误

    NoMethodError: undefined method `-' for nil:NilClass
    

    除此之外,第一行使用的to_i函数始终返回一个数字 - 即使您从其他地方获得nil""nil.to_i和{ {1}}都返回零。

  • 如果"".to_i不存在,您还会获得guest.arrived