Voldemort – he who must not be named – types是其名称无法在源代码中写下的类型。在Rust中,闭包有这样的类型,因为编译器generates a new internal type for each closure。接受闭包作为函数参数的唯一方法是接受一个泛型类型(通常称为F
),它被限制为Fn()
(或类似)特征。
Rust中的引用始终包含一个生命周期参数,即使通常可以省略此生命周期。生命周期不能被明确命名,因为它们代表某种复杂的编译器内部范围。与生命周期交互的唯一方法是使用一个通用参数(通常称为'a
),它代表任何生命周期(可能由另一个生命周期限制)。当然,有'static
可以命名,但这是一个特例,并不与我的争论发生冲突。
那么:Rust引用了Voldemort类型吗?或者我是否误解了“Voldemort类型”或Rust引用这个术语?
答案 0 :(得分:5)
作为在该地区没有任何特别强烈知识的人:
我认为答案很可能是:技术上是肯定的,但它过度还原。有点像说“所有类型都是整数数组”;我的意思是,是,但你这样做会失去一些有用的语义歧视。
Voldemort类型通常来隐藏用户的实现类型,因为它只应该是临时的,或者除了函数描述的接口之外你不应该使用任何东西。引用在技术上完全不可命名,但它并不像实际上限制你一样。我的意思是,即使你可以命名特定的生命周期,我也不认为你可以用它做任何有意义的事情(除了可能在函数中稍微更严格的生命周期检查)
答案 1 :(得分:0)
可以说不是。所有语言中的引用和指针类型是否都视为Voldemort类型?他们隐藏了某物,但没有。
我们将生命周期设想为被调用函数之外的代码区域。而且,它们的创建大致类似于rustc。但是,我认为函数签名是我们实际看到的生存期的类型定义。 rustc只是满足他们。除了您在函数定义中看到的内容外,命名的生存期也无所不包。