例如,如果您将a 初始化为nil,然后您想使用此值执行操作,您将看到undefined method '%' for nil:NilClass 错误,为避免此错误,您可以在之前检查该值是否为nil为了正常执行这样的操作,可能是:
puts (a % 1) if !a.nil?
这不会向您显示任何内容,因为 a 是 nil,它会以 true 响应您的 if 语句。
初始化为false 的值也会发生同样的情况,如果在这种情况下a 是false,您将无法使用此对象执行% 操作,因为% 将是等待左侧的 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