ruby - ruby 是纯面向对象的编程语言吗,即使它不支持多重继承?请解释

标签 ruby oop multiple-inheritance overloading

即使 ruby​​ 不支持多重继承,它也是一种纯面向对象的编程语言吗?如果是如何?请解释。

我知道通过允许在一个类中包含多个模块,在一定程度上弥补了多重继承的不足。

此外,我不确定纯 OOP 语言的所有先决条件。来自 this article , 他们提到

a Ruby class can have only one method with a given name (if you define a method with the same name twice, the latter method definition prevails..

这是否意味着 Ruby 不支持重载方法。如果是这样,它仍然可以作为纯 OOP 语言吗?如果是这样,请同时解释这背后的原因。

谢谢。

最佳答案

有几个不同的面向对象语言家族。如果您正在考虑多重继承和方法重载,您可能来自 C++ 思维模式,在这种思维模式中,这些事情是理所当然的。这些约定来自 C++ 深受其影响的早期语言。

Ruby 不关心对象的类型,而是对象能够响应的方法。这叫做 duck typing是什么分开Smalltalk受启发的语言,如来自更正式的 Ruby SimulaALGOL影响了 C++ 等语言。

使用模块可以“混合”来自不同来源的方法并具有一种多重继承,但严格来说,一个类不可能有多个直接父类。在实践中,这通常不是什么大问题,因为继承并不是添加方法的唯一方式。

由于鸭子类型,方法重载在很大程度上与 Ruby 无关。在 C++ 中,您可能有多种方法来处理 stringintfloat 类型,但在 Ruby 中,您会有一个调用 to_f 对传入的任何内容进行相应的操作。从这个意义上说,Ruby 方法更像是 C++ 模板。

关于ruby - ruby 是纯面向对象的编程语言吗,即使它不支持多重继承?请解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17680271/

相关文章:

ruby-on-rails - RSpec 使用模型的旧属性字段?

ruby-on-rails - 使用 Ruby on Rails 的表单助手

ruby - 如何在 Ruby 中处理 'reverse sum'?

ruby-on-rails - Rails 控制台找不到 activesupport-4.1.2,即使它已安装

c++ - 无法在构造函数中访问类的继承成员

python - 返回值的方法与直接在 Python 中设置属性的方法

c++ - 超多重非虚拟继承中基类的作用域运算符

objective-c - Trying to follow MVC - 寻求良好设计的建议

java - 继承两个Java类

c++ - 在这种情况下,有比dynamic_cast更好的解决方案吗?