所以我有很多将从父类继承的子类。我一直在玩实例变量@
和类变量@@
,我还没有能够实现我想要的。我想要的实际上与下面的代码一起工作,但它看起来根本不干。关于如何重构这个的任何建议?
class Planet
def has_color?(color)
self.color == color
end
def has_position?(position)
self.position == position
end
end
class Mars < Planet
def color
"red"
end
def position
4
end
end
class Earth < Planet
def color
"blue"
end
def position
3
end
end
我希望实现的目标
>> Mars.has_color?("red")
true
>> Earth.position
3
答案 0 :(得分:2)
似乎没有理由让你的特定行星(如Earth
)成为类型:Earth
不是一系列相关行星,它只是一个行星。一组常数可能会更好地服务于你:
class Planet
attr_reader :color, :position
def initialize(color, position)
@color, @position = color, position
end
# If you really want these..
def has_color?(color)
@color == color
end
def has_position?(position)
@position == position
end
end
MARS = Planet.new("red", 4)
EARTH = Planet.new("blue", 3)
MARS.has_color?("red")
EARTH.position
如果创建全局常量困扰你,一定要将它们包装在一个模块中(也许Planets
?)
答案 1 :(得分:0)
这对你有用吗?我试过,它适用于Ruby1.9.2
class Planet
def self.has_color?(color)
@color == color
end
def self.has_position?(position)
@position == position
end
def self.position
@position
end
def self.color
@color
end
end
class Mars < Planet
@color="red"
@position=4
end
class Earth < Planet
@color="blue"
@position=3
end
puts Mars.has_color?("red")
puts Mars.has_position?("3")
puts Earth.position
puts Earth.color