私は ruby koans をやっていて、DiceSet プロジェクトに参加しています。DiceSet クラスを作成しましたが、インスタンス変数が、思ったようにインスタンスに保持されないようです。私のコードは
class DiceSet
attr_reader :values
@values = []
puts @values.class
def roll(number_of_rolls)
(1..number_of_rolls).each do |roll|
puts @values.class
@values << (1..6).to_a.sample
end
return @values
end
end
次に、koan は私の DiceSet クラスを次のように使用します。
dice = DiceSet.new
dice.roll(5)
puts dice.values.class
assert dice.values.is?(Array)
@values インスタンス変数で何が起こっているかを追跡するために puts コマンドをそこに配置しましたが、最初の puts @values.class だけがその配列クラスを示しています。他のすべては NilClass を返しています。インスタンス変数を間違って使用していますか、それとも他に何か不足していますか? メソッド呼び出し後にインスタンス変数の割り当てが解除されますか?
編集: @values = [] を以下に示すようにロール メソッドに配置したので、私のクラスは正しく動作します。私の唯一の質問は、初期化メソッドに @values = [] を入れたときに、roll メソッドが @values を配列ではなく NilClass と見なす理由です。