2017-05-21 51 views
0

誤差(undefined method '%' for false:FalseClass)正在引用這條線未定義的方法'%」爲假:FalseClass

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

爲什麼產生這個錯誤?它是編輯程序中某些默認代碼的一部分,直到最近我才遇到這個問題。

+2

什麼是'icon_index'這個呃ror告訴你,你想在布爾對象上使用'#%'方法,爲了讓你的問題更清楚,請添加icon_index等於(簡單示例),或者你在哪裏得到它? –

回答

2

如果比如你初始化anil,然後你想使用這個值,你會看到一個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 

或者直接來驗證,如果值是一個integerFixnumNumeric類:

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 
+0

很好解釋。 – Gerry

相關問題