ルビーを学んでいます。このコードの課題が提示されます。
正方形、長方形、および円を表すクラスを作成します。各形状の面積を計算できるはずです。(デフォルトの色を継承するだけでなく、色を設定できるという部分もありますが、それは私が困惑している部分ではないので、ここでは仕様を含めません. )
can_fit?
クラスは、 2 つの形状を評価し、一方の形状が他方の形状に適合することに基づいて true または false を返すメソッドを呼び出すこともできる必要があります。
だから私はシェイプクラスをうまく作成し、正方形、長方形、円の面積をうまく計算しています。
しかし、私はその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