另一方面,Crystal顶级似乎是文档所称的“The Program”,但似乎没有办法以编程方式访问它:在顶层评估 self 会给出错误 "there's no self in this scope" . 出于同样的原因,如果没有明确的接收器,你就无法调用 inspect ,因为它只会告诉你那个名称没有本地变量或方法 .
我想主要的提示是"[Top Level Namespace]" 2 " lists no files in the " Defined In“部分的文档,该部分通常列出定义对象的类 .
2 回答
奇怪的是,答案是没有人!至少不是Ruby意义上的 .
Crystal docs声称一切都是一个对象,但是当涉及到这些"top-level"方法时会有轻微的欺骗 .
与将"top-level"放入
Kernel
模块的Ruby不同,Crystal具有"Top Level Namespace"的概念,其中puts
,gets
,raise
等方法存在 .它似乎没有与之关联的标识符,因此您无法检查/内省它以找出存在的内容 .
我知道这是一个有点老问题,但我刚开始玩Crystal .
在Ruby中,顶级对象称为
main
,是类Object
的实例,并在Kernel
模块中混合 .另一方面,Crystal顶级似乎是文档所称的“The Program”,但似乎没有办法以编程方式访问它:在顶层评估
self
会给出错误"there's no self in this scope"
. 出于同样的原因,如果没有明确的接收器,你就无法调用inspect
,因为它只会告诉你那个名称没有本地变量或方法 .我想主要的提示是"[Top Level Namespace]" 2 " lists no files in the " Defined In“部分的文档,该部分通常列出定义对象的类 .
简而言之,似乎Crystal开发人员选择保持最高级别无法访问,而不是object/class hybrid在Ruby中有点奇怪object/class hybrid .