【发布时间】:2021-05-18 06:52:30
【问题描述】:
在下面的示例中,Default trait 仅用于演示目的。
我的问题是:
-
f()和g()的声明有什么区别? - 为什么
g()与f()相同,所以无法编译? - 如何从
impl trait泛型类型声明中返回具体类型?
struct Something {
}
impl Default for Something {
fn default() -> Self {
Something{}
}
}
// This compiles.
pub fn f() -> impl Default {
Something{}
}
// This doesn't.
pub fn g<T: Default>() -> T {
Something{}
}
【问题讨论】:
-
g返回T但您尝试返回Something -
是的,但是Something 实现了T。而且T 不是类型,而是类型约束/特征。那么?
-
“某物实现 T”是什么意思?如果你做
g::<i32>(),那么g必须返回i32,而Something不是i32 -
g将返回在编译时填充的具体类型。然而,f不提供任何保证(例如返回数据的大小或类型),除了它将实现Default。 -
好的,我想我现在明白了,非常感谢!你们俩! :)
标签: function generics types rust traits