You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Crystal中Person+非类错误咨询:嵌套类继承self异常解析

关于Crystal中Person+错误及嵌套类继承self的问题解答

这个问题涉及Crystal编译器处理类定义的内部机制,我来帮你拆解清楚:

1. 什么是Person+?

Person+是Crystal编译器在类定义过程中生成的临时内部类型标记,用来指代还未完成全部定义的类。当编译器正在解析一个类的代码(比如你的Person类),还没完全完成这个类的定义时,它会用这种类名+的格式来标记这个"未完成"的类状态——这是编译器内部用来处理类构建的中间状态,并不是你代码里能直接使用的公开类型。

2. 继承操作为何会出现这种类"被修改"的现象?

这其实不是继承真的修改了Person类,而是Crystal编译器的处理顺序和临时类型机制导致的:

  • 当你在Person内部定义第一个嵌套类Current < self时,此时Person的定义还没完全结束,self指向的是编译器正在构建的Person类,此时编译器会用Person+来标记这个未完成的状态。
  • 当你接着定义第二个嵌套类Destroyed < self时,此时的self已经变成了这个临时的Person+类型,而不是完整的Person类。因为Person+只是编译器内部的临时标识,不是一个可以被继承的完整类,所以就会抛出Person+ is not a class的错误。
  • 而当你直接写< Person时,你明确指定了要继承的是外层的Person类,编译器可以直接定位到正确的类,不会被临时类型干扰;如果只定义一个嵌套类,编译器在处理完这个嵌套类后,会把临时的Person+替换成完整的Person类,所以也不会报错。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:45:56