我一直在为一个班级项目学习 Ruby on Rails。我不断听到“Ruby 中的一切都是对象”。我不确定我是否理解为什么这是一件好事,或者如果这是一件好事?
4 回答
一个反例是在 JavaInteger
中是一个对象但int
不是,这意味着不同的操作适用于两者(诚然,在最近的 Java 中,自动转换为对象版本/从对象版本转换,但这可能会带来意想不到的性能问题)。对象由于间接而慢一点,但更灵活;一切都是对象意味着一切都表现一致。Java 又是一个例子:数组不是对象,ArrayIterator
而是事后固定的东西(甚至有多个第三方实现),因此与集合类迭代器的工作方式不太一致。
它使 Ruby 非常灵活。数字和其他原始类型可以更改或扩展。
这也可以产生非常优雅的语法:
5.times { print "print this 5 times" }
Ruby 中的一切都不是一个对象(是的,我知道人们在说这句话时通常是什么意思,但它仍然不完全正确)。说“Ruby 中的一切都评估为一个对象”更合适。这是一个有趣的见解,为了更恰当的阐述,我将简单地引用大卫布莱克。这是一个很好的阅读:
就像其他人已经指出的那样,在Java等其他语言中,除了对象之外还有原语。对于编译器和计算机来说,获得最高效的代码是一件好事,但是,程序员需要根据他们处理的函数和方法使用不同的函数和方法。
由于Ruby是为人类而非计算机设计的,因此为了人类的生产力而牺牲一点计算资源被认为是好的。因此,Ruby 从来没有区分对象和原语。它肯定也降低了新手的学习曲线。在内部,Ruby 正在使用一种称为标记指针的技术,据我所知,由于缺少原语而导致的性能损失并没有那么糟糕。
另一件值得注意的事情是,在 Ruby 中,类也是对象,这意味着即使在代码运行时,您也可以轻松地修改类及其行为。这种动态特性赋予了程序员如此大的权力,而 Ruby 代码往往看起来非常简洁。Ruby on Rails 充分利用了 Ruby 语言的这种动态特性。