Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Crystal lang 什么对象接收#放入我的水晶程序?_Crystal Lang - Fatal编程技术网

Crystal lang 什么对象接收#放入我的水晶程序?

Crystal lang 什么对象接收#放入我的水晶程序?,crystal-lang,Crystal Lang,在此基本Crystal程序中: class Greeter def greet(person) puts "Hello, #{person}!" end end 谁是#put的接收者?它是自我的吗 如果是这样,为什么我在任何地方都找不到它的定义 如果没有,是谁 奇怪的是,答案是没有人!至少不是在红宝石的意义上 他们声称一切都是一个对象,但是当涉及到这些“顶级”方法时,有一点欺骗 与Ruby不同的是,Crystal将所有“顶级”内容都放在内核模块中,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
      那样有点奇怪