规范:
# 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
行应该是主脑游戏的一行,有四个随机值在1到6之间,这个测试应该确保它正常运行。看起来值返回int而不是数组。为什么呢?
我如何自行排除故障?我尝试通过附加
来简单地查看值发生了什么row = Row.new
puts row.values
到我的row.rb,但我得到一个未初始化的常量错误。为什么这不起作用?
答案 0 :(得分:1)
您的问题是#random_row
将返回4
(Fixnum#times
的返回值为self
),这意味着当您初始化Row
时, @values
设置为4
。
您可能需要以下内容:
def random_row
Array.new(4) { rand(1..6) }
end
答案 1 :(得分: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]
您的其他问题是因为您没有指定模块,Row
不存在,Mastermind::Row
确实存在。
[4] pry(main)> row = Mastermind::Row.new
=> #<Mastermind::Row:0x00000101c593e0 @values=4>
[5] pry(main)> row.values
=> 4