未定义的方法`%' for false:FalseClass

时间:2017-05-21 16:53:15

标签: ruby-on-rails ruby

错误(undefined method '%' for false:FalseClass)引用此行

   rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)

为什么会产生此错误?它是编辑程序中某些默认代码的一部分,直到最近我才遇到这个问题。

1 个答案:

答案 0 :(得分:2)

例如,如果您将a初始化为nil,然后您想使用此值执行操作,则会发现undefined method '%' for nil:NilClass错误,为避免这种情况,您可以检查之前,如果值为nil,以便以正常方式执行此类操作,可能为:

puts (a % 1) if !a.nil?

这不会向您显示任何内容,因为当anil时,它会true回复您的if声明。

初始化为false的值可能会发生同样的情况,如果在这种情况下afalse,您将无法执行%操作使用此对象,因为%将等待左侧的integer值:

a = false
puts (a % 1)
# => undefined method `%' for false:FalseClass (NoMethodError)

与以前一样,可能的解决方案可能是检查值是否为false

puts (a % 1) if a != false

您还可以使用if a,这可能意味着价值不是nil和/或不是false

puts a % 1 if a

或者直接验证该值是integer且是Fixnum还是Numeric类:

a = 1
puts a % 1 if a.class == Fixnum
# => 0
puts a % 1 if a.is_a? Fixnum
# => 0
puts a % 1 if a.is_a? Numeric
# => 0

在你的情况下,你可以这样做:

if icon_index
  rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
end