【问题标题】:Is it good that "everything is an object"?“一切都是对象”这样好吗?
【发布时间】:2012-04-14 11:43:28
【问题描述】:

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

【问题讨论】:

标签: ruby-on-rails ruby oop


【解决方案1】:

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

【讨论】:

  • 另一个反例:在 JS 中 nullundefined 不是对象,所以当你期待一个数组时,你不能只说 if (param.length),而 param 可能可能是null。在 Ruby 中,您可以修改 nil 以拥有自定义方法(例如 Rails 中的 blank?,所有对象都会响应)。
  • 在 Java 中,数组 对象——它们只是没有太多有用的东西,因此(可以说)应该在数组。
  • 显然,Oracle's planning 从 Java 语言中完全删除原语。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-26
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多