Indexing 对字符串和“借用”使用“RangeFull”语法`

Indexing 对字符串和“借用”使用“RangeFull”语法`,indexing,rust,Indexing,Rust,我正在开发一个类似pandas的Rust库,我想支持的一个功能是使用Rust范围语法(例如0..=5,.7,4..,.等)使用范围边界对索引(以及以后的系列/帧)进行psuedo切片 此外,我希望支持使用索引中包含的数据的引用作为范围的边界,而不仅仅是整数。因此,如果索引中有[“dog”、“cat”、“bird”、“sheep”],我希望支持查找.loc\u范围(&“dog”。=&“bird”),例如返回第一、第二和第三项 我已经到了这样一个地步:作为标签支持的primitiveCopy类型可以

我正在开发一个类似
pandas
的Rust库,我想支持的一个功能是使用Rust范围语法(例如
0..=5
.7
4..
.
等)使用
范围边界对索引(以及以后的系列/帧)进行psuedo切片

此外,我希望支持使用索引中包含的数据的引用作为范围的边界,而不仅仅是整数。因此,如果索引中有
[“dog”、“cat”、“bird”、“sheep”]
,我希望支持查找
.loc\u范围(&“dog”。=&“bird”)
,例如返回第一、第二和第三项

我已经到了这样一个地步:作为标签支持的primitive
Copy
类型可以完美地工作,但我仍然停留在
String
上。使用
“str”
而不是
&“str”
(参见下面的代码示例,比较
字符
字符串
的用法,可能值得提出一个新的SO问题),这不仅让人觉得奇怪,而且天真的
调用
字符串
版本根本无法编译!相反,我必须指定类型参数,如最后一行代码所示

如果这是一个内部电话,我只会做出改变,然后继续。但我希望这是一个面向用户的函数,我不希望用户需要为此边缘情况指定类型参数。有办法解决这个问题吗?更具体地说,我希望不必为
TestIndex::loc\u range(..)
案例指定类型变量

使用std::fmt::Debug;
使用std::hash::hash;
使用std::借用::借用;
使用std::ops::RangeBounds;
pub-trait-TestLabel:Debug+Clone+size+PartialEq+
Eq+Hash+PartialOrd+Ord{}
字符{}的impl TestLabel
字符串{}的impl TestLabel
发布结构测试索引(Vec);
植入测试索引{
pub fn loc_范围(&self,范围:R)->选项
哪里

R:我想你需要有自己的特点

像这样:

(注意:我没有填写所有必需的实现,对于每种范围类型,您都需要
LocRange
的实现) 您可以通过返回以下函数来最小化锅炉板

pub fn generic_loc_range_impl<'a, R, L, Q: 'a>(test_index: &TestIndex<L>, range: R) -> Option<Vec<usize>>
    where
        R: RangeBounds<&'a Q>,
        L: Borrow<Q> + TestLabel,
        Q: Hash + Eq + ?Sized,
{
    ...
}
pub fn generic\u loc\u range\u impl(测试索引:&TestIndex,范围:R)->选项
哪里

R:RangeBounds现在有意义了,
RangeFull
不接受类型args,因此助手特征抽象了不同类型的范围类型。谢谢!FWIW,我看不出你现在删除的问题有什么本质上的错误。