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