“Ruby中不需要接口和抽象类” – >有人能解释一下吗?

我试图绕过Ruby,我正在努力的一件事是缺乏接口/抽象类支持。 从谷歌搜索,我不断看到抽象类相关的Ruby问题的响应是“你在用Java思考.Ruby不能这样工作”

那么,如果没有接口/抽象类,Ruby如何在Ruby中工作呢?

例如,在Java中,我可能会创建一个抽象类“book”,其子类为“novel”,“textbook”和“journal”。 我在“书”中提到了许多常见的function,但我不希望它可以直接访问 – 一本书必须是小说,教科书或期刊。

在ruby中,我将如何写出这种function?

我也是Ruby的首发。 根据我的理解,ruby中的抽象类更接近竞争对手。 那就是module 。 你不能创建任何模块实例,但你可以包含另一个类。 因此,目标类将获得父级的全部function

  module Log def write //blah end end class EventLog include Log def Prepare end end 

在像java / C#这样的静态类型语言中,Interfaces强制这些类在编译时拥有所有方法。 由于Ruby是动态的,因此没有任何意义。

为了更清楚,请查看这些post为什么动态语言不需要接口..

  1. 为什么-不要-我们-需要的接口,在动态语言
  2. 为什么-DO动态语言样ruby和Python的-不具有最概念的接口

干杯

有办法实现这种类型的东西,包括abstract_type gem。 虽然ruby不需要它并且有mixins,但我认为有些情况,比如适配器,你需要用一些更明确的东西来保护你的接口到一组对象。

另外,请查看http://metabates.com/2011/02/07/building-interfaces-and-abstract-classes-in-ruby/