2014-10-29 56 views
0

該規範:RSpec的:未定義方法 '最大' 4:Fixnum對象

# spec/row_spec.rb 
require "spec_helper" 

module Mastermind 
    describe Row do 

    context "#initialize" do 
     it "has four elements by default" do 
     row = Row.new 
     expect(row.values.size).to eq 4 
     end 

     it "can only go up to 6" do 
     row = Row.new 
     expect(row.values.max).to be <= 6 
     end 
    end 

    end 
end 

的代碼:

# lib/mastermind/row.rb 
module Mastermind 
    class Row 
    attr_accessor :values 
    def initialize (values=random_row) 
     @values = values 
    end 

    def random_row 
     4.times {random||=[] << rand(1..6)} 
    end 

    end 
end 

行被認爲是用於策劃者遊戲的行,與4個隨機值在1和6之間,並且此測試應確保其正常工作。它看起來像值返回一個int而不是一個數組。爲什麼?

我該如何解決這個問題?我試圖通過附加

row = Row.new 
puts row.values 

我row.rb做一些簡單的,看看到底是什麼與價值觀發生,但我只是得到一個未初始化的恆定誤差。爲什麼這不起作用?

回答

1

這是你的問題(random_row):

[1] pry(main)> 4.times {random||=[] << rand(1..6)} 
=> 4 

times返回值。你想是這樣的:

[2] pry(main)> 4.times.map { rand(1..6) } 
=> [6, 5, 3, 6] 

你的另一個問題是,因爲你沒有指定模塊,不存在,Mastermind::Row一樣。

[4] pry(main)> row = Mastermind::Row.new 
=> #<Mastermind::Row:0x00000101c593e0 @values=4> 
[5] pry(main)> row.values 
=> 4 
1

你的問題是,#random_row將返回4(的Fixnum#times返回值是self),這意味着當你初始化,@values設置爲4

你可能想是這樣的:

def random_row 
    Array.new(4) { rand(1..6) } 
end 
+0

或者它可以只是:'(1..6).to_a.sample(4)' – Surya 2014-10-29 20:13:49

相關問題