一切都是ruby的对象吗?

ruby中的一切都是对象吗? 这包括Fixnum吗?

取决于你所说的“一切”。 Fixnum正如其他人所certificate的那样。 类也是类Class实例。 方法,运算符和块不是,但可以由对象包装( Proc )。 简单的任务不是,也不可以。 像这样的陈述也不是也不可以。 评论显然也属于后一组。

大多数实际上重要的东西,即你想要操纵的东西,都是对象(或者可以包裹在对象中)。

是。 Fixnum是一个inheritance自Integer的类,它inheritance自Numeric ,最终inheritance自Object

或者,你为什么不问它呢? 🙂

 1.is_a? Object # => true 1.class # => Fixnum Fixnum.is_a? Object # => true 

阅读网站上的Ruby信息和文档也是一个好主意。

实际上Ruby中的所有东西都是一个Object,除了控制结构。 无论是否在方法,代码块或运算符之下是对象,它们都被表示为对象,并且可以这样考虑。

以代码块为例:

 def what_is(&block) puts block.class puts block.is_a? Object end > what_is {} Proc true => nil 

或者对于方法:

 class A def i_am_method "Call me sometime..." end end > m = A.new.method(:i_am_method) > m.class Method > m.is_a? Object true > m.call "Call me sometime..." 

运算符(如+, – ,[],<<)作为方法实现:

 class String def + "I'm just a method!" end end 

对于第一次进入编程的人来说,这在实际意义上意味着可以应用于一种对象的所有规则都可以扩展到其他对象。 您可以将String,Array,Class,File或任何类定义为以相同的方式表现。 这是Ruby比其他语言更容易上手和使用的原因之一。

Ruby没有任何原语(比如java中的int,char等),所以每个值(任何可以位于赋值语句右侧的东西)都是一个对象。 但是,语言语法的控制语句,方法和其他function不是。

对。

 > Fixnum.is_a?(Object) #=> true 

要查看inheritance链:

 > pp Fixnum.ancestors [Fixnum, Integer, Precision, Numeric, Comparable, Object, ... Kernel] => nil 

是的,一切都是ruby中的一个对象 ,包括Fixnum