我是Ruby新手,我正在进行关于 Classes 和继承的练习。
我们应该可以调用更大的_than?每种形状的方法。此方法应评估两个形状并返回true或false,具体取决于一个形状的区域比另一个大。换句话说,large_than?如果接收对象大于参数对象,则该方法应返回true:
我在创建large_than时遇到问题?方法。我不知道如何从其他形状中获取该区域并将其与接收对象的区域进行比较。
class Shape
attr_accessor :color, :area
def initialize(color = nil)
@color = color || 'Red'
end
def larger_than?(object_area)
if self.class.area > object_area
"true"
else
"false"
end
end
end
class Rectangle < Shape
attr_accessor :width, :height
def initialize(width, height, color = nil)
@width, @height = width, height
super(color) # this calls Shape#initialize
end
def area
width * height
end
end
class Square < Rectangle
def initialize(side, color = nil)
super(side, side, color) # calls `Rectangle#initialize`
end
end
class Circle < Shape
attr_accessor :radius
def initialize(radius, color = nil)
@radius = radius
super(color) # this calls Shape#initialize
end
def area
Math::PI * (radius*radius)
end
end
NoMethodError
undefined method `larger_than?' for #<B:0x007fdf3047d5a8 @color="Red">
答案 0 :(得分:0)
如果您提供了调用此比较的实际代码,将会有所帮助,但基于此代码,您尝试将Fixnum类(基本上是整数)的值与NilClass(基本上没有)进行比较。
我假设第4行是这个
if shape.area > self.class.area
我假设当你调用这个行shape.area包含某种类的Fixnum,它可以作为Instance方法计算,而你将它与Class方法进行比较
所以有两个问题
如果您可以提供实际调用这些类的代码或解释您要执行的操作,我将能够为您提供进一步的帮助。