【问题标题】:Crystal: Class+ is not a class, it's a Class+Crystal:Class+ 不是 Class,而是 Class+
【发布时间】:2017-12-31 20:32:41
【问题描述】:

在尝试online crystal compiler(太棒了)时,我遇到了一个我似乎无法找到解释的错误:

class Person
  class Current < self
  end

  class Destroyed < self
  end  
end

错误:Person+ is not a class, it's a Person+

如果我将代码更改为

class Person
  class Current < Person
  end

  class Destroyed < Person
  end  
end

然后一切正常。

如果我这样做

class Person
  class Current < self
  end      
end

然后一切正常。

问题

  1. 什么是Class+(/Person+...我假设Person 是一个类)
  2. 似乎被继承正在以某种方式改变Person 类。这是怎么回事?

【问题讨论】:

  • 我猜想很多oop语言self(或this)指的是实例。
  • @DanielA.White 嗯,所以你的评论让我玩了更多。它看起来/听起来像一个类继承一个类型,而不是一个类对象?也许这是类型语言的标准,但我来自 Ruby 背景,并没有意识到这一点。您知道Person+ 消息的含义吗?为什么我能够一次继承一个对象?我重新阅读了有关类型和继承的 Crystal Docs。这似乎没有被覆盖。关于继承的部分说“一个类继承自另一个类”-->我将其解释为继承了一个类对象(上面,self 是--我认为)。
  • 答案很简单:这只是一个错误。请在水晶问题跟踪器上报告。继承一个类确实会改变编译器中的父类,这就是导致这个错误的原因。这种突变对用户来说应该是不可见的,只是一个实现细节。这里编译器中的一个错误意外地将其暴露给您。
  • @RX14 啊,酷!会的。

标签: crystal-lang


【解决方案1】:

正如@RX14 在评论中所说,事实证明这是一个错误。问题在这里打开:https://github.com/crystal-lang/crystal/issues/5495

【讨论】:

    猜你喜欢
    • 2018-01-04
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2011-04-29
    相关资源
    最近更新 更多