3

我一直在为一个班级项目学习 Ruby on Rails。我不断听到“Ruby 中的一切都是对象”。我不确定我是否理解为什么这是一件好事,或者如果这是一件好事?

4

4 回答 4

5

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

于 2012-04-12T22:40:16.350 回答
2

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

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

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

于 2012-04-12T22:41:16.903 回答
2

Ruby 中的一切都不是一个对象(是的,我知道人们在说这句话时通常是什么意思,但它仍然不完全正确)。说“Ruby 中的一切都评估为一个对象”更合适。这是一个有趣的见解,为了更恰当的阐述,我将简单地引用大卫布莱克。这是一个很好的阅读:

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

于 2012-04-12T22:48:53.997 回答
1

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

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

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

于 2012-04-13T08:41:50.097 回答