我有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。
我做错了什么?
答案 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