给出以下代码段:
type
BaseOne = object of Base
ConsumeOne = Consume[BaseOne]
我想为它定义基本和基本消费者的几种类型,如下所示:
ConsumeOne
现在,当我创建一个新的let co: ConsumeOne = proc(b: BaseOne): bool = false
:
Error: type mismatch: got (proc (b: BaseOne): bool{.gcsafe, locks: 0.}) but expected 'ConsumeOne'
我收到以下编译错误:{{1}}
我做错了什么?
答案 0 :(得分:3)
问题是类型参数的类型约束当前与子类型不匹配;我不知道这是一个bug还是故意的。目前,只需从类型参数: Base
中删除T
约束。
答案 1 :(得分:0)
也许有助于制作消费gcsafe:
Consume*[T: Base] = proc(e: T): bool {.gcsafe.}