2016-04-07 51 views
5

Default特征可以是#[derive(..)] d只有当派生类型的内容也实现Default。这意味着特质越容易使用,实施越多。不过,我注意到std中有些类型是缺少的实现,虽然它们有完全有效的默认值(有时取决于泛型参数)。为什么默认不实施互斥,RWLock,CondVar,持续时间?

  • Mutex<T>RWLock<T>可以通过new(_)where T: Default
  • 实施
  • CondVar可以简单地实现由CondVar::new()
  • Duration可以得出(以获得零时间,这是一个合理的默认

这些遗漏是否存在技术原因?

+0

我不同意*零持续时间,这是一个合理的默认*,但其他人,当然。 – Shepmaster

+0

为什么?你认为根本没有明智的违约,或者你认为有更明智的违约? – llogiq

+0

我会说没有明智的默认设置。大多数时候,我认为关于超时的持续时间以及零超时对我来说都没有意义,也不会选择任何其他值。虽然我确实看到这个数字实现'Default'为'0',所以¯\\ _(ツ)_ /¯。 – Shepmaster

回答

1

有些人对Debug的实现提出了类似的问题,请参阅“Missing Debug Implementations — #31869”,它也只能在与Default类似的条件下推导出来。

不幸的是,相应的PR“libcore: add Debug implementations to most missing types #32054”似乎表明某些类型不是Debug,因为没有人为他们编写Debug实现。其他一些类型对于实现应该做什么存在争议,并且有一些担心将它们添加到标准库中。

由于相同的非技术原因,假定至少某些类型不是Default是合理的。

+0

存在问题#31865(至少对于CondVar,我做了其他人的说明)。我推了[PR#32807](https://github.com/rust-lang/rust/pull/32807) – llogiq