代码之家  ›  专栏  ›  技术社区  ›  Andrew Grimm atk

一切都是ruby中的对象吗?

  •  11
  • Andrew Grimm atk  · 技术社区  · 15 年前

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

    6 回复  |  直到 15 年前
        1
  •  42
  •   Amadan    15 年前

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

    实际上 问题 ,即您希望操纵的,是对象(或可以包装在对象中)。

        2
  •  6
  •   jtbandes    15 年前

    对。 Fixnum 是一个类,继承自 Integer ,继承自 Numeric Object .

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

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

    阅读 Ruby info documentation 在网站上也是个好主意。

        3
  •  4
  •   Dan Garland    11 年前

    除了控制结构之外,Ruby中几乎所有的东西都是对象。不管方法、代码块或操作符是否是一个对象,它们都被表示为对象,可以这样认为。

    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
    

    对于第一次进入编程领域的人来说,这在实际意义上意味着可以将应用于一种对象的所有规则扩展到其他对象。您可以将字符串、数组、类、文件或任何定义为行为方式大致相同的类。这就是为什么Ruby比其他语言更容易学习和使用的原因之一。

        4
  •  2
  •   mistertim    15 年前

    Ruby没有任何原语(如java中的int、char等),因此每个值(可以位于赋值语句右侧的任何值)都是一个对象。但是,控制语句、方法和语言语法的其他特性并不重要。

        5
  •  1
  •   Alan    15 年前
        6
  •  1
  •   Dex    15 年前

    是的。

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

    要查看继承链:

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