UPDATE:Nim没有泛型类型的默认值(请参阅答案(。
为什么Nim不使用泛型类型的默认值?
我希望能够有不同的Company
版本,但我不想在不需要的时候指定泛型类型参数Company[void]()
,只使用Company()
。
但它不是这样工作的,下面的代码不会编译,为什么?那么,泛型类型的默认值有什么意义呢?
type Company*[T = void] = object
name*: string
data*: T
echo Company()
代码没有编译,因为Nim没有通用类型AFAIK的默认值,不确定它是从哪里得到的(如果你在文档中找到它,请链接它,我以前从未见过(。
你可以做的是像这样别名你的默认类型:
type
Company*[T] = object
name*: string
data*: T
VoidCompany = Company[void]
echo VoidCompany()
Nim是一种静态类型的语言,这意味着在某个时候它需要弄清楚参数的类型。你可以在编译时这样做,也可以在运行时延迟它,但这不会改变编译器需要知道所有东西的类型才能正常工作的事实,默认参数只决定它的值,而不是类型