【问题标题】:What is a "main" in ruby? [duplicate]什么是红宝石中的“主”? [复制]
【发布时间】:2016-11-16 21:58:42
【问题描述】:

我的 ruby​​ 脚本中有以下几行。当我运行这个脚本时,它的输出为main。但我无法访问那个main。我不知道这是什么?

是对象还是实例?

例如:

puts self #=>  main

如果我访问“main”意味着它会给出类似“undefined local”的错误 变量或方法”。

以前我使用这个 self 在一个类中打印它的当前对象。 例如:

class Ex
  puts self #=> Ex
end

在这里,我可以使用该 self 对象来获取当前的类名。后 这我可以访问那个Ex 类。但在第一个例子中 返回main。但我无法访问它。那么是什么原因 这背后?

【问题讨论】:

  • 问了同样的问题here
  • 一切都是 Ruby 中的对象,我的意思是 一切。这包括程序的“主要”上下文。

标签: ruby


【解决方案1】:

简答:

Main 是特殊对象,具有特殊属性。

更多信息:

您触摸了名为Introspection 的主题。维基百科提供了哪些信息:

在计算中,类型自省是程序的能力 在运行时检查对象的类型或属性。

所以你正在做的就是打电话给introspection

那么让我们更进一步,我们可以用这个做什么?

puts self.class

这将给出Object。所以下一个重要的事情是:

Ruby 中的一切都发生在某个对象的上下文中。

所以disclose this 有一个很好的答案。

【讨论】:

  • Ruby 通常将此称为“反射”,尽管它与计算机科学中的许多东西一样,意思大致相同。
  • @tadman 感谢您的评论,我必须更新我的答案吗?
  • 你没有错。我只是在谈论 Ruby 世界中使用的本地术语。
【解决方案2】:

Ruby 中的关键字 self 使您可以访问当前对象。在您的事业中,Ex 恰好是一个类,而不是 Ex 的实例。但是,所有语句都在 ruby​​ 的 ma​​in 对象下执行,因为 ma​​in 恰好是最外层的对象)。目前该语句位于对象 ma​​in 内部,这意味着 ma​​in 是最内部的对象。因此将 self 打印为 main 作为输出。

更多信息研究:

https://www.jimmycuadra.com/posts/self-in-ruby/

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多