首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Default::default()是如何在锈蚀中工作的?

Default::default()是如何在锈蚀中工作的?
EN

Stack Overflow用户
提问于 2022-06-03 06:49:28
回答 3查看 174关注 0票数 1

为了澄清这一点,我并不是问如何使用默认的特性或如何实现它。我想知道的是一条线是如何

代码语言:javascript
复制
let a: f32 = Default::default();

真的有用吗?Default::default()是什么实现?

我会想象像这样的事情

代码语言:javascript
复制
fn default<T: Default>() -> T {
    T::default()
}

我甚至不知道该搜索什么,因为这似乎是一个与特征相关的功能?这是件事吗?无论如何,我在std::default的文档里找不到它,所以我有点困惑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-06-07 05:35:20

Default::default()只是<_ as Default>::default(),即“使用推断查找类型”。

票数 2
EN

Stack Overflow用户

发布于 2022-06-03 07:06:05

在这种情况下,所有这些行都是等效的。Default是由f32实现的一种特性,它包含函数fn default() -> Self。本质上,我们只是告诉编译器我们想要调用这个特性。函数default可能还有其他特性,因此可以防止歧义。

代码语言:javascript
复制
// Explicitly invoke the f32 implementation of Default.
let a: f32 = Default::default();
let a = <f32 as Default>::default();

// Call the function default for f32 which is resolved to be the trait Default.
let a = f32::default();

尽管如此,f32::default()在几乎所有情况下都是首选的,因为它更好地表达了您想要做的事情。f32本身不提供default函数,如果有一个相互竞争的特性导入到模块中,这将是很奇怪的。如果是这样的话,<f32 as Default>::default()会更好,因为它显式地说明了调用函数default的哪种类型的特征实现。最后,Default::default()可以是一个简单的替代方法,因为它允许编译器根据上下文推断类型,但通常不鼓励它,因为它可以减少代码的冗长性。

票数 2
EN

Stack Overflow用户

发布于 2022-06-03 07:14:26

为了添加到@Locke的出色答案,下面是Default用于f32的实现可能是什么样子:

代码语言:javascript
复制
impl Default for f32 {
    fn default() -> Self {  // Or f32 instead of Self, same thing.
        0.0f32
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72485702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档