繁体   English   中英

为什么无法推断泛型?

[英]Why is a generic type unable to be inferred?

我刚刚开始使用Nim,并且对泛型有疑问。

这是一个简化的示例,它复制了我遇到的问题。 从具有通用类型T的简单对象类型开始,并使其成为实例:

type Foo[T] = object
    bar: T

var my_foo = Foo[string](bar: "foobar")

如果我创建了一个它工作正常proc与通用型T ,以及一个返回值T ,然后返回bar的对象,它的类型是场T

# This works!
proc test[T](f: Foo, n: int): T = 
    f.bar

echo test(my_foo, 1)

但是,如果相反,我想返回T的多个副本序列,这些序列来自Foo.bar字段,类型为T ,如下所示:

# This fails!
proc test2[T](f: Foo, n: int): seq[T] =
    var s: T = f.bar
    var r: seq[T] = @[] 
    for x in 1..n:
        r.add(s)
    result = r 

echo test2(my_foo, 3)

然后我得到以下错误:

错误:无法实例化:“ T”

任何人都可以提供关于这是为什么以及如何正确执行此操作的任何见解?

不确定造成这种情况的内部原因是什么,但是Nim中的类型推断对此可能太本地化了。 我认为通过写Foo[T]来显式声明Foo的实例是一种好风格,例如:

proc test2[T](f: Foo[T], n: int): seq[T] =

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM