Rust 为什么不为互斥、RWLock、CondVar和Duration实现默认值?
只有当派生类型的内容也实现了Rust 为什么不为互斥、RWLock、CondVar和Duration实现默认值?,rust,Rust,只有当派生类型的内容也实现了Default时,trait才能是#[派生(…)]d。这意味着特性实现得越多,就越容易使用。但是,我注意到,std中的一些类型缺少实现,尽管它们具有完全有效的默认值(有时取决于泛型参数) Mutex和RWLock可以通过new()(其中T:Default)实现 CondVar可以通过CondVar::new() Duration可以派生(获得零Duration,这是一个合理的默认值) 这些遗漏是否有技术原因?一些人对调试实现提出了类似的问题,请查看哪一个也只能在类
Default
时,trait才能是#[派生(…)]
d。这意味着特性实现得越多,就越容易使用。但是,我注意到,std
中的一些类型缺少实现,尽管它们具有完全有效的默认值(有时取决于泛型参数)
Mutex
和RWLock
可以通过new()
(其中T:Default
)实现
CondVar
可以通过CondVar::new()
Duration
可以派生(获得零Duration,这是一个合理的默认值)
这些遗漏是否有技术原因?一些人对调试实现提出了类似的问题,请查看哪一个也只能在类似于默认值的条件下派生
不幸的是,相应的PR“”似乎表明某些类型不是Debug
,仅仅因为没有人为它们编写Debug
实现。其他一些类型对于实现应该做什么有争议,人们担心将它们添加到标准库中
出于同样的非技术原因,可以合理地假设至少有一些类型不是默认值。我不同意零持续时间,这是一个合理的默认值,但其他类型肯定是。为什么?你认为根本没有合理的违约,还是你认为有更合理的违约?我想说没有合理的违约。大多数情况下,我会考虑超时的持续时间,超时为零对我来说没有意义,也不会选择任何其他值。虽然我确实看到数字实现了Default
为0
,但是\_(ツ)_/“@Shepmaster:我使用的内部框架的默认超时值为0。奇怪的是,如果您忘记覆盖它,通常回复速度不够快……有一个问题#31865(至少对于CondVar,我记下了其他问题)。我已经推了