47

如果我将此文件作为“ ruby x.rb”运行:

class X
end
x = X.new

叫“”的东西是X.new什么?

它是一个对象/过程/等吗?

4

5 回答 5

53

Ruby 中的一切都发生在某个对象的上下文中。顶层的对象称为“main”。它基本上是一个具有特殊属性的 Object 实例,其中定义的任何方法都被添加为 Object 的实例方法(因此它们在任何地方都可用)。

所以我们可以制作一个完全由以下内容组成的脚本:

puts object_id
@a = 'Look, I have instance variables!'
puts @a

它将打印“105640”和“看,我有实例变量!”。

这不是你通常需要关心的事情,但它就在那里。

于 2009-05-27T20:22:37.277 回答
13

顶级调用者是一个对象 main,它属于 Object 类。

试试这个红宝石程序:

p self
p self.class
于 2009-05-27T20:30:14.860 回答
3

这是X级。您正在调用创建类 X 对象的“new”方法。因此,如果您将此文本作为脚本运行,Ruby:

  • 创建一个新类 X,它是 Object 的子类,并且自动(作为 Object 的子类)继承一些方法,其中new一个。
  • 起个名字x
  • 调用该new新类的方法X,创建一个 X 实例对象;x 获得对该对象的引用。
于 2009-05-27T20:19:07.173 回答
2

这是运行该行的 ruby​​ 解释器

x = X.new

与许多脚本语言一样,脚本是从上到下解释的,而不是像大多数编译语言那样具有标准的入口点方法。

于 2009-05-27T20:21:15.297 回答
1

正如查理马丁所说,X.new 是对 X 类的构造函数的调用,它返回一个 X 类型的对象,存储在变量 x 中。

根据您的标题,我认为您正在寻找更多。Ruby 不需要 main,它按照看到的顺序执行代码。因此,必须在调用它们之前包含依赖项。

因此,您的 main 是在类或模块定义之外编写的任何过程式代码。

于 2009-05-27T20:23:35.900 回答