我正试图绕过Ruby,而我正在努力解决的一件事是缺少接口/抽象类支持。从谷歌搜索,我不断看到抽象类相关的Ruby问题的响应是“你在用Java思考.Ruby不能那样工作”
那么,如果没有接口/抽象类,Ruby如何在Ruby中工作?
例如,在Java中,我可能会创建一个抽象类“book”,其子类为“novel”,“textbook”和“journal”。我在“书”中提到了许多常见功能,但我不希望它直接可访问 - 一本书必须是小说,教科书或期刊。
在ruby中,我将如何写出这种功能?
答案 0 :(得分:19)
我也是Ruby的首发。根据我的理解,红宝石中的抽象类更接近竞争对手。那是module
。你不能创建任何模块实例,但你可以包含另一个类。因此,目标类将获得父
module Log
def write
//blah
end
end
class EventLog
include Log
def Prepare
end
end
在java / C#等静态类型语言中,Interfaces强制这些类在编译时拥有所有方法。由于Ruby是动态的,因此没有任何意义。
为了更清晰,请查看这些帖子,为什么动态语言不需要接口..
答案 1 :(得分:0)
有很多方法可以实现这种类型的东西,包括abstract_type gem。虽然ruby不需要它并且有mixins,但我认为有些情况,比如适配器,你需要用一些更明确的东西保护你的接口到一组对象。
另外,请查看http://metabates.com/2011/02/07/building-interfaces-and-abstract-classes-in-ruby/