2012-04-12 34 views
3

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

+1

简短回答:一致性和灵活性(读作“锋利的刀”)。 – Phrogz 2012-04-12 22:41:17

+0

什么意思?我认为这个答案会因个人意见而有所不同。 – j4y 2012-04-12 22:45:01

+0

相关问题:http://stackoverflow.com/questions/24270/whats-the-point-of-oop – 2012-04-12 23:21:18

回答

5

一个反例是,在Java中Integer是一个对象,但int不是,这意味着不同的操作同时适用于(当然在最新的Java有自动转换到/从对象的版本,但是这会带来意想不到的性能问题)。由于间接性,对象稍慢一些,但更灵活;一切都是一个对象意味着一切都表现一贯。 Java也会是一个例子:一个数组不是一个对象,并且在事实之后(甚至是多个第三方实现)被闩上,因此与集合类迭代器的工作方式不一致。

+0

另一个反例:在JS'null'和'undefined'不是对象,所以当你期待数组中,如果'param'可能为'null',则不能仅仅说'if(param.length)'。在Ruby中,你可以修改'nil'来使用自定义方法(比如Rails中的'blank?',所有对象都会响应)。 – Phrogz 2012-04-12 22:44:58

+0

在Java中,数组*是*对象 - 它们对它们没有太多有用的东西,因此所有其他的东西(可以说)应该在数组上。 – delnan 2012-04-12 22:49:22

+0

显然,[Oracle的计划](http://www.javaworld.com/javaworld/jw-03-2012/120315-oracle-s-java-roadmap.html)从Java语言中彻底删除原语。 – 2012-04-13 00:52:46

2

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

这也可能会导致相当优雅的语法:在Ruby中

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

1

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

由于红宝石是专为人类而不是计算机,为了人类的生产力牺牲一点计算资源被认为是好的。因此,Ruby从来没有区分对象和基元。它肯定会降低新手的学习曲线。在内部,Ruby使用的是一种叫做标记指针的技术,就我所知,缺乏原语的性能损失并不是那么糟糕。

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

相关问题