这个问题基于这样一个假设,即 rust 中的友好/符合人体工程学的 API 应该更喜欢引用类型QwhereT: Borrow<Q>而不是&T直接期望。根据我使用其他集合类型(如 )的 API 的经验HashMap,情况似乎确实如此。那说...
为什么binary_search方法 onVec<T>不是那样定义的?目前,在稳定上,binary_search实现如下:
pub fn binary_search(&self, x: &T) -> Result<usize, usize>
where
T: Ord,
{
self.binary_search_by(|p| p.cmp(x))
}
Run Code Online (Sandbox Code Playgroud)
似乎以下将是一个更好的实现:
pub fn binary_search_modified<Q>(&self, x: &Q) -> Result<usize, usize>
where
T: Borrow<Q>,
Q: Ord + ?Sized,
{
self.binary_search_by(|p| p.borrow().cmp(x))
}
Run Code Online (Sandbox Code Playgroud)
上面两个API的比较:
let mut v: Vec<String> = Vec::new();
v.push("A".into());
v.push("B".into());
v.push("D".into());
let _ = v.binary_search("C"); // Compilation error!
let _ = …Run Code Online (Sandbox Code Playgroud) rust ×1