定义通用函数类型

时间:2015-06-05 16:41:32

标签: generics inheritance anonymous-function nim

给出以下代码段:

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}}

我做错了什么?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

也许有助于制作消费gcsafe:

Consume*[T: Base] = proc(e: T): bool {.gcsafe.}