【发布时间】:2016-04-05 21:27:16
【问题描述】:
举个例子
fn main() {
let mut test: Vec<u32> = Vec::new();
test.push(5);
test.push(8);
test.push(0);
test.sort_by_key(|k| k.abs());
}
我搜索了the source code for Vec,但没有看到类似derive 的特征。
trait SomeTrait {
fn sort_by_key...
}
impl SomeTrait for Vec... { }
我的 IDE 的 IntelliSense 也没有检测到 sort_by_key。
我搜索了 Rust Github,找到了this implementation in slice.rs:
pub fn sort_by_key<B, F>(&mut self, mut f: F)
where F: FnMut(&T) -> B, B: Ord
{
self.sort_by(|a, b| f(a).cmp(&f(b)))
}
但我看不到Vec 与切片的关系以及Vec 如何访问sort_by_key。
我在vec.rs看到了这个构造函数:
pub fn new() -> Vec<T> {
Vec {
buf: RawVec::new(),
len: 0,
}
}
我浏览了struct,但我不明白sort_by_key 的来源。
由于我的英语不是很好,我无法理解文档。我知道通过使用Deref,实现Deref 的结构可以访问它所应用的方法,在这种情况下是一个切片,但它可能是另一个?
我找到了this url,这有助于我理解我的后续问题并可能对其他人有所帮助:
struct Foo;
impl Foo {
fn foo(&self) { }
}
struct Bar {
foo: Foo,
}
impl std::ops::Deref for Bar {
type Target = Foo;
fn deref(&self) -> &Foo {
&self.foo
}
}
fn main() {
let test: Bar = Bar { foo: Foo };
test.foo();
}
我觉得这很酷
【问题讨论】:
-
我完全无法理解这个问题——你可以重写它的一些组件吗?
-
@ᅵZVᅵ 我更新了希望你能理解的更好。谢谢
标签: rust