2015-01-12 47 views
-1

你好我寫(N)邊的一個簡單的芯片代碼,它工作正常:實例VS類變量和隨機數紅寶石

class Die 

    def initialize(sides) 
    @sides = sides 
    raise ArgumentError if sides < 1 
    end 

    def roll 
    roll_number = rand(@sides) + 1 
    end 
end 

然而,當我在我的初始化的變量從實例更改上課隨機數產生從整數到一堆小浮點數1左右。

class Die 

    def initialize(sides) 
    HERE --> @@sides = sides 
    raise ArgumentError if sides < 1 
    end 

    def roll 
    roll_number = rand(@sides) + 1 
    end 

end 

我想知道什麼可能導致這種差異?

回答

0

您的代碼存在錯誤,在您的第二個版本的Die中,您實際上從未在您的roll方法中調用正確的變量。

它應該是:

def roll 
    roll_number = rand(@@sides) + 1 
    end 

而是你正在評估到:

roll_number = rand(nil) + 1 

按照rand庫,如果你不提供一個參數蘭特返回一個僞隨機浮點數在0.0和1.0之間,包括0.0和不包括1.0。

1

在第二個代碼片段中,您正在初始化類變量@@sides,但仍將實例變量@sides傳遞到rand()。由於@sides未初始化,因此您將nil傳遞給rand()的調用,因此Kernel#rand會給出float而不是整數。