我正在为Ruby中的绣花机文件格式编写一个阅读器,它有两种类型的针脚:
在Java中,我可能会使用抽象基类" Stitch"和两个班级" JumpStitch"和#34; RegularStitch"继承它。然后我会使用快速和脏的instanceof或重载方法(句柄(JumpStitch针脚),手柄(RegularStitch针脚)或类似的东西)来做那些事情(我需要区分常规针脚和跳针)。
你如何在Ruby中实现类似的东西(因为Ruby缺少方法重载和instance_of?根据https://stackoverflow.com/a/3893403/3818564是一个很大的nono?)
以下评论中包含两个用例:
我有一个List中所有连续针迹的列表 - 其中一些是RegularStitch类型,其他类型是JumpStitch。现在我想对这个列表做些什么。 说,画一个预览。我正在迭代列表,并根据针脚的类型决定做什么:使用给定的颜色绘制RegularStitch,不绘制JumpStitch(但是坐标将从它更新,因为它们是它的基础以下针脚)。 - 22分钟之前的no-trick-pony
另一个例子:我想实际操作刺绣机。当只有常规针迹(相同颜色)时,我可以更快地操作机器,但如果接下来是JumpStitch,则必须减慢机器速度。我希望这能澄清我的意图。
答案 0 :(得分:3)
我认为你的handle(JumpStich)
和handle(RegularStitch)
首先是对OO设计的不良用法。如果不包含行为,有什么不同的类型?
为什么这不起作用?
class Stitch
attr_accessor :color, :coordinates
# ... common behavior
end
class RegularStitch < Stitch
def foo
# regular stitch behavior
end
end
class JumpStitch < Stitch # or RegularStitch?
def foo
# jump stitch behavior
end
end
您的Reader
类会根据读取的数据创建实例。我们对foo
的含义知之甚少,所以我只能猜测,但这是多态性的全部要点之一。