gpt4 book ai didi

rust - 为什么 impl RangeBounds for Range<&T> 需要调整 T 的大小?

转载 作者:行者123 更新时间:2023-12-03 11:34:42 25 4
gpt4 key购买 nike

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]>进入参数需要 impl RangeBounds<[u8]> .
背后是否有一些设计考虑?如果这是有意的,那么这是传递 [u8] 范围的正确方法?

最佳答案

这是相当不幸的,但添加 T: ?Sizedbtreemap.range("from".."to") 这样的代码中的边界中断类型推断因为编译器无法在 T = str 之间进行选择和 T = &str , 两者都满足 range 上的界限.
PR #64327 上对此进行了一些讨论。 .据我所知,没有计划放宽这些 impl 的限制。 s 在 future 。
而不是 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 .

关于rust - 为什么 impl RangeBounds<T> for Range<&T> 需要调整 T 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66130661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com