2016-09-23 93 views
0
Fixnum.methods.count #=> 99 
3.methods.count  #=> 131 

如果他们有不同的方法,我猜他们是不完全一样的东西。Ruby中`Fixnum`和`3`有什么不同?

  1. 究竟有什么区别?

  2. Ruby在引擎盖下发生了什么?

我使用红宝石2.2.1p85(2015年2月26日修订49769)

+7

'3'是'Fixnum'的一个实例,而'Fixnum'是'Class'的一个实例。 – Aetherus

+2

...和'Class'是'Class'的一个实例,'Class'是'Class'的一个实例,... –

回答

1

正如@Aetherus说,Fixnum是一个类的实例,所以Fixnum.methods回报它的所有类的方法,而3.methods将返回Fixnum实例方法,因为3Fixnum一个实例。

例如,基本的数学运算符是实例方法,如:+,:-等,所以Fixnum.respond_to?(:+)返回false。并且3.respond_to?(:class_variables)返回false,因为该方法是一个类方法,所以该类的实例无法访问它。

相关问题