大佬教程收集整理的这篇文章主要介绍了为什么 impl RangeBounds<T> for Range<&T> 需要调整 T 的大小?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
https://doc.rust-lang.org/src/core/ops/range.rs.html#979-986
impl<T> RangeBounds<T> for Range<&T> {
fn starT_Bound(&self) -> Bound<&T> {
Included(self.start)
}
fn end_bound(&self) -> Bound<&T> {
Excluded(self.end)
}
}
如您所见,T
没有标有 ?Sized
,这阻止了我将 Range<&[u8]>
传递给参数 requires impl RangeBounds<[u8]>
。
背后是否有一些设计考虑?如果这是有意的,那么传递 [u8]
范围的正确方法是什么?
很不幸,但是在 T: ?Sized
之类的代码中添加 btreemap.range("from".."to")
边界会中断类型推断,因为编译器无法在 T = str
和 T = &str
之间进行选择,这两者满足 range
上的边界。
PR #64327 上对此进行了一些讨论。据我所知,未来没有放宽这些 impl
界限的计划。
代替 Range<T>
,您可以使用 Bound<T>
元组;例如,您可以编写以下代码来代替 takes_range("from".."to")
:
use std::ops::Bound;
takes_range((Bound::Included("from"),Bound::Excluded("to"))
这会起作用,因为即使 (Bound<&T>,Bound<&T>)
是 RangeBounds<T>
,T
确实实现了 !Sized
。
以上是大佬教程为你收集整理的为什么 impl RangeBounds<T> for Range<&T> 需要调整 T 的大小?全部内容,希望文章能够帮你解决为什么 impl RangeBounds<T> for Range<&T> 需要调整 T 的大小?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。