"concept" 定义带有参数的方法时程序无法编译

Program doesn't compile when "concept" defines a method with a parameter

我有一个 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)

当我创建一个新的 Bar 并将其传递给 make 过程以创建一个新的 Baz 时,它没有编译:

let bar = Bar(s: "whatever")

let made = make[Bar](bar)

Error: type mismatch: got (Bar) but expected 'T'

但是,如果我在概念中删除 y,它会编译,例如 x.test is bool 并相应地更新 test proc。

我做错了什么?

改变

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