【问题标题】:Why Ruby doesn't support abstract classes?为什么 Ruby 不支持抽象类?
【发布时间】:2012-11-09 15:21:54
【问题描述】:

对不起,如果它是重复的。我发现了很多关于如何实现抽象类的帖子,但也有很多关于为什么它们没有在 Ruby 中实现的帖子。

我与 Ruby 合作了大约 4 年。而且我真的还是不明白为什么 Ruby 没有抽象类的本地实现?有时它对于一个好的应用程序设计是非常必要的。我和其他开发人员一次又一次地用“NoImplementedError”做空方法,但我觉得不好。

不支持接口和抽象类背后是否存在棘手的意识形态?

【问题讨论】:

标签: ruby


【解决方案1】:

如果您正在考虑抽象类或接口,您很可能会考虑为您的代码创建某种契约。

然而,Ruby 被设计为弱类型 并非设计为静态类型语言,而是严重依赖鸭子类型。显然,在某些情况下执行接口检查可能非常有用(例如,以确保传递的对象将支持所有需要的方法),但仍将在运行时完成,从而使该功能实际上毫无用处。

据我所记得,有人打算创建一个类型化的版本,或者 Ruby 和 Dave Thomas 甚至提到有人尝试过这个并告诉它效果不好:)

【讨论】:

  • Ruby 不是弱类型...它只是不是静态类型:en.wikipedia.org/wiki/…
  • 嗯,是的,一个好点:它既不是弱类型,也不是强类型——修复了答案。
  • 它是一种强大的、动态类型和贪婪评估的、面向对象的脚本语言。
  • 它在类型检查方面不是强类型的,所以它是有争议的——不能发明任何类型的严格放置和不可避免的类型检查。
  • 强类型 != 静态类型 ...这通常是一个争论,但对我来说,ruby 是强类型的。
猜你喜欢
  • 2018-02-22
  • 2019-04-19
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
相关资源
最近更新 更多