1

给定以下代码段:

type
  Base = object of RootObj
  Consume*[T: Base] = proc(e: T): bool

我想为它定义基本和基本消费者的几种类型,如下所示:

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'

我究竟做错了什么?

4

2 回答 2

3

问题是类型参数的类型类约束当前不匹配子类型;我不知道这是一个错误还是故意的。现在,只需: Base从类型参数中删除约束T

于 2015-06-06T11:09:54.787 回答
0

也许这有助于使 Consume gcsafe:

Consume*[T: Base] = proc(e: T): bool {.gcsafe.}
于 2015-06-05T17:40:16.377 回答