“一切都是对象”好吗?

时间:2012-04-12 22:29:02

标签: ruby-on-rails ruby oop

我一直在研究Ruby on Rails的类项目。我一直听到“Ruby中的所有内容都是一个对象”。我不明白我明白为什么这是一件好事,或者也许这是一件好事?

4 个答案:

答案 0 :(得分:5)

一个反例是,在Java Integer中是一个对象,但int不是,这意味着不同的操作适用于两者(诚然,在最近的Java中,自动转换为对象版本,但这会引入意想不到的性能问题)。由于间接,对象有点慢,但更灵活;一切都是对象意味着一切都表现一致。再一次Java就是一个例子:一个数组不是一个对象,而ArrayIterator是在事实之后用螺栓固定的东西(甚至是多个第三方实现),因此与集合类迭代器的工作方式不完全一致

答案 1 :(得分:2)

它使Ruby变得非常灵活。数字和其他原始类型可以被更改或扩展。

这也可以产生非常优雅的语法:

5.times { print "print this 5 times" }

答案 2 :(得分:2)

Ruby中的所有东西都不是一个对象(是的,我知道人们在说这句话时通常意味着什么,但它仍然不完全正确)。将“Ruby中的所有内容评估为对象”更合适。这是一个有趣的见解,为了更恰当的阐述,我只想引用David Black。这是一个很好的阅读:

http://rubylearning.com/blog/2010/09/27/almost-everything-is-an-object-and-everything-is-almost-an-object/

答案 3 :(得分:1)

正如其他人已经指出的那样,除了 Java 等其他语言中的对象之外还有其他原语。对于编译器和计算机来说,获得最有效的代码是一件好事,但是,程序员需要根据他们正在处理的函数和方法使用不同的函数和方法。

由于 Ruby 是专为人类而非计算机设计的,因此为了人类的生产力而牺牲一点计算资源被认为是好的。因此,Ruby从未在对象和基元之间进行区分。它肯定会降低新手的学习曲线。在内部,Ruby正在使用一种称为标记指针的技术,据我所知,由于缺少原语而导致的性能损失并不是那么糟糕。

另一件值得注意的事情是,在Ruby中,类也是对象,这意味着即使代码运行,您也可以轻松地修改类及其行为。这种动态特性为程序员提供了如此强大的功能,而Ruby代码往往看起来非常简洁。 Ruby on Rails正在充分利用Ruby语言的这一动态方面。