ruby什么时候才能成为特征类

God*_*her 4 ruby eigenclass

在对象或类上定义单例方法之前是否存在Eigenclasses.即当定义单例方法或类方法时,它们是否总是存在或存在?

Jör*_*tag 5

每个对象总是有一个单例类.期.没有ifs,没有buts,没有例外.

根据编译器或解释器的巧妙程度,它可能会也可能不会执行某些性能优化.但是像所有性能优化一样,那些不允许更改程序的结果,所以即使这些性能优化确实导致特定单例类实际上存在的某些状态,程序仍然必须表现得好像它确实存在,所以你无论如何也无法说出来.毕竟,这几乎就是"性能优化" 的定义.

一些Ruby实现可能会做一些优化,别人可能做其他的优化,有些甚至没有做任何优化可言.你无法从你的计划结果中得知,你不应该在意,你一定不在乎.

例如,YARV执行以下优化:

  • 由于几乎没有对象具有单例方法,因此为每个对象创建单例类将浪费内存,因此懒惰地创建单例类:当您创建单例方法(def foo.barObject#define_singleton_method)时,打开单例类(class << foo)时,当你要求一个对象的单例类(Object#singleton_class)时.

  • 由于几乎每个类都有某种类方法,因此懒惰地创建单例类的开销没有意义,因此对于类,总是急切地创建单例类.

但这是YARV的私人内部实施细节.JRuby可能采用不同的方式.IronRuby可能采用不同的方式.MacRuby可能会采用不同的方式.MRuby可能会采用不同的方式.黄玉可能会采用不同的方式.鲁宾尼斯可能会采用不同的方式.MagLev可能采用不同的方式.甚至YARV的下一个补丁级也可能采用不同的方式.

如果你看一下单身人士课程就在那里.如果你看它,它是否在那里并不重要.所以,从语义上讲,它始终存在.