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

Pla*_*Ton 16 ruby abstract-class interface

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

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

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

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

Ram*_*Vel 19

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

  module Log
    def write
      //blah
    end
  end

  class EventLog
    include Log

    def Prepare
    end
  end
Run Code Online (Sandbox Code Playgroud)

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

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

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

干杯

  • 这些被称为mixins(编辑:一种类型的mixin,在这种情况下`include`影响实例方法,而你也可以使用`extend`来影响类方法......希望我能正确解释),如果我没记错的话.本质上,该模块提供了在许多类之间共享的功能,但本身并不是一个类.在执行此操作时,您无法实例化Book模块,但可以实例化包含Book模块的Journal类. (5认同)