从ruby的面向对象说起

ruby是一个完全面向对象的语言。在许多其他语言里不是对象的东西在ruby里也都是对象,比如整数。更神奇的是,类也是对象。为什么说神奇呢?看一下下面的代码:

class A
end
puts A.class

结果是Class。可以看到,类A 也是一个对象,它是类Class的实例。接着看

puts Class.class

原来Class是Class类自己的实例。

puts Class.superclass
puts Module.superclass
puts Object.superclass
puts Object.class

类Class的爸爸是Module,Module的爸爸是Object。而Object是所有类的祖宗。但是类Object还是类Class的实例。很神奇吧。

我们知道,对象是类的实例,是由类创建的。而在ruby中,类本身也是一个对象,这就形成了一种鸡生蛋蛋生鸡的循环。似乎这是周而复始,无穷无尽的,就像下面那幅埃舍尔的名画

这两个相互描绘的手就像是ruby中的类和对象。两只手相互描绘在现实世界里是不可能的。那么在ruby中,又是如何打破这个僵局的呢?其实很简单,这两只相互描绘的手只是一幅画而已。而让两只手相互描绘则是画家。在画面内部无法解决的矛盾跳到画面外面就很简单了。在ruby里也是如此。在语言层面,类和对象似乎也像是这两只相互描绘的手,但不要忘了,还有一个ruby虚拟机的存在。一切的对象都是由它创建,而语言里的ClassName.new并没有直接创建对象。在一切的开始,虚拟机创建了Class,Module,Object,之后,这三个东西就可以滋生出整个对象世界。虚拟机就像是至高无上的神,创建了整个世界。但是在一个ruby代码的世界里,能看到的却只有对象,而不能直接看到虚拟机的存在。我们可以写完全面向对象的代码,而不用去操心这些对象究竟是怎么来的。

回到现实世界。不知道大家有没有想过我们的现实世界是怎么来的。根据被普遍接受的物质不灭理论,物质不会消失,也不会凭空出现。那么这些物质最初又是怎么来的呢?话说我们的宇宙是由一个很小的核心爆炸,不断膨胀而产生的,又话说宇宙在膨胀到极限后又会重新收缩,又变回一个很小的核心,周而复始。那么这一切又是如何开始的呢?在这个宇宙之外又是什么样呢?如果这些问题存在答案的话,要么接受一个创造这一切的“神”的存在,要么就只能说,物质是无须创造而自然存在的。

8 thoughts on “从ruby的面向对象说起

  1. abc

    王白佛言。是诸华乃从无处出生。佛答。从无处出。复问。无处从何出生。佛言。从无所起来。王复问。无所起从何所来。佛言。从无所生来。王复问。无所生从何所来。从不动来。王复问。不动从何所来。从无造来。王复问。无造从何所来。佛言。从无名来。无名从何所来。从无生来。无生从何所来。从无音来。王复问。无音从何所来。从无二来。王复问。无二从何所来。从无形来。王复问。无形从何所来。佛言。从自然来。王复问。自然从何所来。从化来。王复问。化从何来。佛言。离於不化来。王复问。离於不化从何来。佛言。离於不化从无相知处来。王复问。无相知处从何来。佛言。已故为诸法。

    Reply
  2. snow

    其实一切皆类也是smalltalk开始的吧~
    java也可以做到,只是为了效率没那么做~
    ruby早早就出现了,火也是随了ROR吧~

    Reply
  3. 眩雪凝星

    我觉得我倾向于接受这个神的存在,但是,我不认为它是我们描述中的任何一个神。
    我只是觉得,它就是这么存在着。所以人可以没有信仰,但是一定要心存敬畏~!

    Reply
  4. 虎虎

    又哲学了……
    自然规律就是这个“神”,因为无神论者在某些国家被当作“无约束论者”,所以很多科学家都自称为“自然神论者”。

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.