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

And*_*imm 13 ruby object

红宝石中的一切都是对象吗?这包括Fixnums吗?

Ama*_*dan 38

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

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

  • +1喜欢这些反例。说一切都是对象而不考虑一切,这有点被洗​​脑了:) (2认同)
  • 是的,我的意思是说“我想知道为什么他们不尝试制作一个占用块的对象”。我的意思是,我知道这可能会导致一些糟糕的魔法,但同时如果你打算编写一种“一切都是对象”的语言,为什么不一路走下去呢。为什么不让 `=>` 成为一个方法。为什么不找到一种方法来使参数列出一个对象。为什么不!我想这是因为你最终会得到一个疯狂的 eso-lang,而不是行业标准。 (2认同)

jtb*_*des 6

是的。Fixnum是一个类,它继承自Integer,继承自Numeric,最后继承自Object

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

1.is_a? Object # => true
1.class # => Fixnum
Fixnum.is_a? Object # => true
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*and 5

实际上,Ruby 中的所有内容都是对象,除了控制结构。无论方法、代码块或运算符是否是对象,它们都被表示为对象,并且可以被认为是对象。

以代码块为例:

def what_is(&block)
  puts block.class
  puts block.is_a? Object
end

> what_is {}
Proc
true
=> nil
Run Code Online (Sandbox Code Playgroud)

或者对于方法:

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..."
Run Code Online (Sandbox Code Playgroud)

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

class String
  def +
    "I'm just a method!"
  end
end
Run Code Online (Sandbox Code Playgroud)

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