Rust 为什么要执行范围限制<;T>;对于范围<&;T>;需要调整T的大小吗?
Rust 为什么要执行范围限制<;T>;对于范围<&;T>;需要调整T的大小吗?,rust,Rust,范围的impl RangeBounds{ fn开始\u绑定(&self)->绑定{ 包括(自启动) } fn结束\u绑定(&self)->绑定{ 排除(self.end) } } 如您所见,T没有标记为?size,这会阻止我将范围传递到参数requiresimpl RangeBounds 它背后是否有一些设计考虑?如果这是有意的,那么传递[u8]范围的正确方法是什么?这是非常不幸的,但是添加T:?Sized绑定会中断代码中的类型推断,比如btreemap.range(“from”。“.”to”
范围的impl RangeBounds{
fn开始\u绑定(&self)->绑定{
包括(自启动)
}
fn结束\u绑定(&self)->绑定{
排除(self.end)
}
}
如您所见,T
没有标记为?size
,这会阻止我将范围
传递到参数requiresimpl RangeBounds
它背后是否有一些设计考虑?如果这是有意的,那么传递
[u8]
范围的正确方法是什么?这是非常不幸的,但是添加T:?Sized
绑定会中断代码中的类型推断,比如btreemap.range(“from”。“.”to”)
,因为编译器无法在T=str
和T=&str
之间进行选择,它们都满足上的边界
关于这一点的一些讨论已在上一次会议上进行。据我所知,没有计划在将来放宽这些impl
s的限制
您可以使用绑定
的元组,而不是范围
;例如,您可以编写以下内容,而不是获取范围(“从“.”到“
”):
use std::ops::Bound;
takes_range((Bound::Included("from"), Bound::Excluded("to"))
这将起作用,因为(绑定,绑定)
确实实现了RangeBounds
,即使T
是!大小
use std::ops::Bound;
takes_range((Bound::Included("from"), Bound::Excluded("to"))