【发布时间】:2021-02-07 18:32:18
【问题描述】:
在T 上的泛型函数中,如何在安全(或不安全)Rust 中正确创建和初始化T 类型的变量? T 可以是任何东西。做这种事情的惯用方式是什么?
fn f<T>() {
let t: T = todo!("what to put here?");
}
一个可能的用例是使用T 作为交换的临时变量。
【问题讨论】:
-
如果不是
Default,你希望它初始化成什么? -
您已经回答了自己的问题。如果您不想使用不安全的代码,那么您必须在
T上放置一个Default绑定并使用T::default()初始化泛型类型。如果你愿意使用不安全的代码,那么你可以在 Rust 标准库中查找rotate_right的实现,或者直接使用rotate_right。 -
您基本上是在问“除了标准库和语言允许我做 X 的方式之外,我该如何做 X?”
-
我投票决定关闭,因为先发制人地排除了你知道的答案,你没有让我们知道什么样的答案是可以接受的。
rotate_right在标准库中,您可以阅读它的代码——它只使用unsafe(尽管不可否认,与您所指的方式不完全一样)。是什么让您认为需要另一种方式?或者为什么您排除的两个选项不能满足您的要求? -
我的意思不是你应该使用
rotate_right,而是这个问题已经包含了两个合理的答案,并且似乎在问“还有什么?”解决方案没有任何实际参数。由于编辑问题不再有这个问题;我已经撤销了我的近距离投票。
标签: generics rust initialization polymorphism parametric-polymorphism