如何在 Nim 中使用默认泛型类型?

How to use default generic types in Nim?

更新:Nim 没有泛型类型的默认值(参见答案)。


为什么 Nim 不使用泛型类型的默认值?

我希望能够拥有不同的 Company 版本,但我不想在不需要时指定泛型类型参数 Company[void]() 而只是使用 Company().

但这样不行,下面的代码无法编译,为什么?那么泛型类型的默认值有什么意义呢?

type Company*[T = void] = object
  name*: string
  data*: T

echo Company()

Nim 是一种静态类型语言,这意味着在某些时候它需要弄清楚您的参数类型是什么。您可以在编译时执行或在运行时延迟执行,但这不会改变编译器需要知道所有内容的类型才能正常工作的事实,默认参数仅确定其值而不是类型

代码无法编译,因为 Nim 没有泛型类型的默认值 AFAIK,不确定你从哪里得到它的想法(如果你在文档的某个地方找到它,请 link 它,我以前没见过这个)。

您可以像这样为您的默认类型设置别名:

type
  Company*[T] = object
    name*: string
    data*: T
  VoidCompany = Company[void]

echo VoidCompany()