学习红宝石。我收到了这个代码挑战:
创建类来表示正方形、矩形和圆形。您应该能够计算每个形状的面积。(还有一部分是关于能够设置颜色以及继承默认颜色,但这不是我难以理解的部分,所以我不会在此处包含规格。)
这些类还应该能够调用一种can_fit?
方法,该方法评估两个形状并根据一个形状适合另一个形状返回真或假。
所以我已经很好地创建了形状类,并且很好地计算了正方形、矩形和圆形的面积。
但我完全被这个can_fit?
方法难住了。我应该将它包含在课堂上,但是如果我们使用区域进行比较并且无法访问区域,我该Shape
如何比较一个形状是否适合课堂中的另一个形状?Shape
Shape
class Shape
attr_accessor :color
def initialize(color="Red")
@color = color
end
def can_fit?(shape)
DEFINE METHOD
end
end
class Rectangle < Shape
attr_accessor :color, :shape, :width, :height
def initialize(width, height, color="Red")
super(color)
@width = width
@height = height
end
def area
@width * @height
end
end
class Square < Rectangle
def initialize(width, color= "Red")
super(width, width, color)
end
end
class Circle < Shape
attr_accessor :color, :shape, :radius
def initialize(radius, color= "Red")
super(color)
@radius = radius
end
def area
Math::PI * (radius ** 2)
end
end
RSpec 测试:
describe "Shape" do
describe "can_fit?" do
it "should tell if a shape can fit inside another shape" do
class A < Shape
def area
5
end
end
class B < Shape
def area
10
end
end
a = A.new
b = B.new
b.can_fit?(a).should eq(true)
a.can_fit?(b).should eq(false)
end
end