程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么 impl RangeBounds<T> for Range<&T> 需要调整 T 的大小?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为什么 impl RangeBounds<T> for Range<&T> 需要调整 T 的大小??

开发过程中遇到为什么 impl RangeBounds<T> for Range<&T> 需要调整 T 的大小?的问题如何解决?下面主要结合日常开发的经验,给出你关于为什么 impl RangeBounds<T> for Range<&T> 需要调整 T 的大小?的解决方法建议,希望对你解决为什么 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 = strT = &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,请注明来意。