从Java到Ruby:用什么替代继承?

从Java到Ruby:用什么替代继承?,ruby,inheritance,overloading,Ruby,Inheritance,Overloading,我正在为Ruby刺绣机文件格式编写一个阅读器,它有两种类型的针迹: 常规缝合:具有颜色和相对坐标。 跳针:也有颜色和相对坐标,但它们不可见。在最终刺绣中,线将被手动删除,并且在可能生成的任何预览中都不可见,坐标变化通常比常规针大得多 在Java中,我可能会使用一个抽象基类Stitch和两个继承自它的类JumpStitch和RegularStitch。然后,我会使用快速脏实例或重载方法handleJumpStitch stitch、handleRegularStitch stitch或类似的方法来

我正在为Ruby刺绣机文件格式编写一个阅读器,它有两种类型的针迹:

常规缝合:具有颜色和相对坐标。 跳针:也有颜色和相对坐标,但它们不可见。在最终刺绣中,线将被手动删除,并且在可能生成的任何预览中都不可见,坐标变化通常比常规针大得多 在Java中,我可能会使用一个抽象基类Stitch和两个继承自它的类JumpStitch和RegularStitch。然后,我会使用快速脏实例或重载方法handleJumpStitch stitch、handleRegularStitch stitch或类似的方法来处理那些我需要区分常规缝合和跳跃缝合的方法

在Ruby中如何实现类似于Ruby的东西,因为Ruby缺少方法重载和实例_?是一个大诺诺根据

以下是我的评论中包含的两个用例:

我有一个列表中所有连续针的列表-其中一些是RegularStitch类型,其他的是JumpStitch类型。现在我想用这个列表做点什么。 比如说,画一个预览。我正在遍历列表,并根据针迹类型决定要做什么:常规针迹将使用给定的颜色绘制,跳跃针迹将不绘制,但坐标将从中更新,因为它们是以下针迹的基础22分钟前没有欺骗小马

另一个例子:我想实际操作一台刺绣机。当只有相同颜色的常规缝线时,我可以更快地操作机器,但如果下一个是跳针,我必须放慢机器的速度。我希望这能澄清我的意图。

我认为您的handleJumpStich和HandleRegularStich在一开始就没有很好地使用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的含义知之甚少,所以我只能猜测,但这是多态性的全部要点之一。

呃,Ruby并不缺少这些东西。你的问题是基于一个基本的错误假设。@meagar我想他想说的是,使用的是?在Ruby中是不受欢迎的。您链接到的答案建议使用多态性。为什么不那样做呢?嗯。。在问我的问题之前我查了一下,你能解释一下吗,您认为这可能是如何实现的?我认为您需要更多地展示如何使用这些类才能回答这个问题。我在这里描述Java的想法:我有一个列表,列出了列表中所有连续的缝合线,其中一些是RegularStitch类型,另一些是JumpStitch类型。现在我想用这个列表做点什么。比如说,画一个预览。我正在遍历列表,并根据针迹的类型决定要做什么:常规针迹将使用给定的颜色绘制,跳跃针迹将不绘制,但坐标将从中更新,因为它们是以下针迹的基础。其他示例:我想实际操作刺绣机。当只有相同颜色的常规缝线时,我可以更快地操作机器,但如果下一个是跳针,我必须放慢机器的速度。我希望这能澄清我的意图:Nick Veys的回答满足你的要求。当您在JumpStitch和RegularStitch对象列表中进行迭代时,会对每个对象调用foo方法,并根据其类型调用相应的foo方法。一种方法从其超类中以给定的颜色绘制缝合对象,另一种则不绘制。但是,我在类中有任意功能,这些类仅用于存储缝合数据实体类。在红宝石世界里这样行吗?如果是这样的话,我会欣然接受这个解决方案。它不是要找到任何解决方案,而是要找到一个在Ruby世界中被视为良好实践的解决方案对于第一个问题,我会这样做:缝合。每个&:预览,在JumpStitch和RegularTitch上都有一个预览方法,它们做的是正确的。对于第二个问题,我可能会这样做:缝合。每个{s|s.apply|u machine|u settingsmachine;s.do|u stitch}。没有更多的细节很难说,但希望你能了解要点。行为应该在缝合中,或者允许它以简单的方式将该行为委托给其他地方。