dieses Beispiel nehmenWarum kann ich sort_by_key mit einem Vec verwenden?
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());
}
Ich suchte the source code for Vec
, aber ich weiß nicht ein Merkmal oder so etwas wie derive
sehen.
trait SomeTrait {
fn sort_by_key...
}
impl SomeTrait for Vec... { }
Die IntelliSense meiner IDE erkennen nicht sort_by_key
entweder.
suchte ich im Rust Github und gefunden 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)))
}
Aber ich kann nicht sehen, wie Vec
auf einer Scheibe bezieht und wie Vec
sort_by_key
zugreifen können.
habe ich diesen Konstruktor in vec.rs
:
pub fn new() -> Vec<T> {
Vec {
buf: RawVec::new(),
len: 0,
}
}
ich die struct
navigiert, aber ich kann nicht verstehen, wo sort_by_key
herkommt.
Nach dem response by Jascha
kann ich nicht verstehen, die Dokumentation als mein Englisch ist nicht sehr gut. Ich verstehe, dass durch die Verwendung von Deref
die Struktur, die Deref
implementiert, Methoden zugreifen kann, auf die es angewendet wird, in diesem Fall ein Stück, aber es könnte ein anderes sein?
Ich fand this url die mich Frage verstehen meine Follow-up hilft und kann anderen helfen:
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();
}
Ich denke, das ist sehr cool
Ich kann diese Frage überhaupt nicht verstehen - können Sie vielleicht einige Komponenten davon neu schreiben? –
@ ㅣ ZV ㅣ Ich aktualisiere ich hoffe du verstehst besser. Danke –