1

我有一个concept这样的:

type Foo = concept x, y
  x.test(y) is bool

然后是一个尝试定义实现方法的类型concept

type Bar = object
  s: string

proc test(x: Bar, y: string): bool =
  x.s == y

以及具有通用字段的类型,T: Foo其构造函数接收T: Foo

type Baz[T: Foo] = object
  f: T

proc make[T: Foo](f: T): auto =
  result = Baz[T](f: f)

当我创建一个 newBar并将其传递给makeproc 以创建一个 newBaz时,它不会编译:

let bar = Bar(s: "whatever")

let made = make[Bar](bar)

错误:类型不匹配:得到(条形图)但预期为“T”

但是,如果我放弃这个y概念,它就会编译,比如x.test is bool并相应地更新testproc。

我究竟做错了什么?

4

1 回答 1

1

改变

type Foo = concept x, y
  x.test(y) is bool

type Foo = concept x
  x.test(string) is bool

在您的代码中,这意味着 x 和 y 都是 Foo 类型。如果你真的是这个意思,请试试这个。

proc test(x: Bar, y: Bar): bool =
  x.s == y.s
于 2015-10-13T03:18:47.197 回答