Ruby ObjectSpace
Programming Ruby
RUBY支持获取即时对象,此功能可以通过ObjectSpace
来实现。
例如,循环列出类型是Float的所有对象。
b = 65.3
ObjectSpace.each_object(Float){|x| p x}
结果
2.718281828459045
3.141592653589793
NaN
Infinity
2.220446049250313e-16
1.7976931348623157e+308
2.2250738585072014e-308
65.3
=> 8
前面7个是由于Float类引入了其他模块,而模块定义了一些常量,就是这些了。第8个是本人赋值的变量。
NaN是不合法值,如:
a = 0.0/0.0
=> NaN
但是,ObjectSpace获取即时对象,对Fixnum, Symbol, true, false, nil来说是不可行的。如:
c=23
ObjectSpace.each_object(Fixnum){|x| p x}
结果为
=> 0