Crystal lang 什么对象接收#放入我的水晶程序?
在此基本Crystal程序中:Crystal lang 什么对象接收#放入我的水晶程序?,crystal-lang,Crystal Lang,在此基本Crystal程序中: class Greeter def greet(person) puts "Hello, #{person}!" end end 谁是#put的接收者?它是自我的吗 如果是这样,为什么我在任何地方都找不到它的定义 如果没有,是谁 奇怪的是,答案是没有人!至少不是在红宝石的意义上 他们声称一切都是一个对象,但是当涉及到这些“顶级”方法时,有一点欺骗 与Ruby不同的是,Crystal将所有“顶级”内容都放在内核模块中,Crystal有一个概念,即
class Greeter
def greet(person)
puts "Hello, #{person}!"
end
end
谁是#put
的接收者?它是自我的吗
- 如果是这样,为什么我在任何地方都找不到它的定义
- 如果没有,是谁
- 奇怪的是,答案是没有人!至少不是在红宝石的意义上
他们声称一切都是一个对象,但是当涉及到这些“顶级”方法时,有一点欺骗
与Ruby不同的是,Crystal将所有“顶级”内容都放在
内核模块中,Crystal有一个概念,即放置,获取,提升等方法都是实时的
它似乎没有与之关联的标识符,因此您无法检查/反省它以找出存在的内容。我知道这是一个有点老的问题,但我刚刚开始玩Crystal
在Ruby中,顶级对象称为main
,是类object
的一个实例,并混合在内核
模块中
self
#=> main
self.class
#=> Object
self.class.ancestors
#=> [Object, Kernel, BasicObject]
另一方面,Crystal顶层似乎是文档中所指的“”,但似乎无法通过编程方式访问:在顶层评估self
会出现错误“此范围内没有self”
。出于同样的原因,在没有显式接收器的情况下,您不能调用inspect
,因为它只会告诉您,没有使用该名称的局部变量或方法
我想主要提示是“[Top-Level Namespace]”的文档在“Defined in”部分中没有列出任何文件,该部分通常列出定义对象的类
简言之,Crystal开发人员似乎选择了让顶层不可访问,而不是像Ruby中的main
那样有点奇怪