我正在使用Ruby制作康威生命游戏,这是我的cell_spec.rb文件。第10行出现错误/失败,具体如下:
expect(GameOfLife::Cell.new_dead_cell).to be_dead
我有另一个文件cell.rb,其中定义了类cell。如何在这个文件中实现自定义谓词匹配器?
require 'spec_helper'
describe GameOfLife::Cell do
def build_neighbours(live_count)
[GameOfLife::Cell.new_live_cell] * live_count +
[GameOfLife::Cell.new_dead_cell] * (8 - live_count)
end
context "factory" do
it "can be dead" do
expect(GameOfLife::Cell.new_dead_cell).to be_dead
end
it "can be alive" do
expect(GameOfLife::Cell.new_live_cell).to be_alive
end
end
context "live cell generation rules" do
let(:cell) { GameOfLife::Cell.new_live_cell }
[0, 1].each do |i|
it "dies when there are #{i} live neighbours" do
expect(cell.next_generation(build_neighbours(i))).to be_dead
end
end
[2, 3].each do |i|
it "lives when there are #{i} live neighbours" do
expect(cell.next_generation(build_neighbours(i))).to be_alive
end
end
(4..8).each do |i|
it "dead when there are #{i} live neighbours" do
expect(cell.next_generation(build_neighbours(i))).to be_dead
end
end
end
context "dead cell generation rules" do
let(:cell) { GameOfLife::Cell.new_dead_cell }
(0..2).each do |i|
it "dies when there are #{i} live neighbours" do
expect(cell.next_generation(build_neighbours(i))).to be_dead
end
end
[3].each do |i|
it "lives when there are #{i} live neighbours" do
expect(cell.next_generation(build_neighbours(i))).to be_alive
end
end
(4..8).each do |i|
it "dead when there are #{i} live neighbours" do
expect(cell.next_generation(build_neighbours(i))).to be_dead
end
end
end
end
这是我的cell.rb文件,其中包含cell类..我想知道dead?和alive?方法的代码实现。请帮忙解决
class GameOfLife::Cell
ALIVE = "alive"
DEAD = "dead"
# lost implementation
def self.new_dead_cell
return DEAD
end
def self.new_live_cell
return ALIVE
end
def dead?
end
def alive?
end
end
be_dead
匹配器起作用,您需要在GameOfLife::Cell
类中实现dead?
方法。 - Patrick Oscitynew_dead_cell
方法应该返回什么?它应该返回实例,所以最后一行应该是“self”,除非方法的最后一条语句已经返回了实例。 - Patrick Oscity