一切都是红宝石的对象吗?

时间:2010-08-07 07:25:52

标签: ruby object

ruby​​中的所有东西都是对象吗?这包括Fixnum s?

6 个答案:

答案 0 :(得分:37)

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

实际上重要的大部分内容,即您希望操作的内容,都是对象(或者可以包装在对象中)。

答案 1 :(得分:4)

是。 Fixnum是一个类,继承自Integer,继承自Numeric,最终继承自Object

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

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

阅读网站上的Ruby infodocumentation也是一个好主意。

答案 2 :(得分:4)

实际上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比其他语言更容易上手和使用的原因之一。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

烨。

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

要查看继承链:

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

答案 5 :(得分:0)