在对象或类上定义单例方法之前是否存在Eigenclasses.即当定义单例方法或类方法时,它们是否总是存在或存在?
每个对象总是有一个单例类.期.没有ifs,没有buts,没有例外.
根据编译器或解释器的巧妙程度,它可能会也可能不会执行某些性能优化.但是像所有性能优化一样,那些不允许更改程序的结果,所以即使这些性能优化确实导致特定单例类实际上不存在的某些状态,程序仍然必须表现得好像它确实存在,所以你无论如何也无法说出来.毕竟,这几乎就是"性能优化" 的定义.
一些Ruby实现可能会做一些优化,别人可能做其他的优化,有些甚至没有做任何优化可言.你无法从你的计划结果中得知,你不应该在意,你一定不在乎.
例如,YARV执行以下优化:
由于几乎没有对象具有单例方法,因此为每个对象创建单例类将浪费内存,因此懒惰地创建单例类:当您创建单例方法(def foo.bar或Object#define_singleton_method)时,打开单例类(class << foo)时,当你要求一个对象的单例类(Object#singleton_class)时.
由于几乎每个类都有某种类方法,因此懒惰地创建单例类的开销没有意义,因此对于类,总是急切地创建单例类.
但这是YARV的私人内部实施细节.JRuby可能采用不同的方式.IronRuby可能采用不同的方式.MacRuby可能会采用不同的方式.MRuby可能会采用不同的方式.黄玉可能会采用不同的方式.鲁宾尼斯可能会采用不同的方式.MagLev可能采用不同的方式.甚至YARV的下一个补丁级也可能采用不同的方式.
如果你看一下单身人士课程就在那里.如果你不看它,它是否在那里并不重要.所以,从语义上讲,它始终存在.
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |