class Class; alias oldNew new; def new(*args); o=oldNew(*args); p "#{o} is defined" end; end
然后试试看怎么退出
打开 Ruby 的 Class 核心类,并且覆写了 Class 类内的那个 new 方法,这个 new 方法在创建一个类对象时,会被自动调用. 而打开核心类这个操作,虽然没有创建一个新的 Class 类,不过也应该会调用 new 方法来应用最新的更改。形成了一个递归调用? @fsword , 大概是这意思吧?不过,我是没明白输出的那一大堆东西是什么玩意儿。我在 irb 下,我直接 C-c 就可以终止.(Emacs irb)
我觉得唯一的解释:
首先,肯定存在递归,只不过,Ruby 解释器可以判断出来这个情形,因此立即终止,并返回 nil. 在 irb 下,首次运行也是返回 nil 的.(1.92) 再次运行,才会出来一堆东西,这中间的玄机,就不得而知了。
就是这个 new. 没错啦。
至于是 new 或者你说的 self.new, 看从那个角度了。这个 new 即是 Class 类内的实例方法,又是任何 Class 对象的 new 方法。(对于类来说,就仿佛类的类方法一样)