当"概念"时,程序不会编译。使用参数定义方法

时间:2015-09-30 22:22:07

标签: nim

我有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 proc以创建新的Baz时,它无法编译:

let bar = Bar(s: "whatever")

let made = make[Bar](bar)
  

错误:类型不匹配:得到(条形码)但预期' T'

但是,如果我将y放在概念中,例如x.test is bool,则会进行编译,并相应地更新test proc。

我做错了什么?

1 个答案:

答案 0 :(得分: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