我正在学习 Rust,想了解函数调用之间的区别
S::foo(&s);
T::foo(&s);
<S as T>::foo(&s);
Run Code Online (Sandbox Code Playgroud)
1 为什么我们需要这些方法?和区别?
2 我们应该在哪里使用它?
struct S;
trait T {
fn foo(&self);
}
impl T for S {
fn foo(&self) {
println!("XXX");
}
}
fn main() {
let s = S;
s.foo(); // (It's clear)
S::foo(&s);
T::foo(&s);
<S as T>::foo(&s);
}
Run Code Online (Sandbox Code Playgroud)
s.foo()尽可能使用方法语法并且明确,它是最不冗长的,并且应用自动取消引用,以便您的代码会更干净。
S::foo(&s)当类型不明确时主要有用Self,它通常用于From::from避免在 ie 上出现涡轮鱼.into()或在 ie 的情况下Rc::clone避免混淆,如果它是引用计数器的廉价增加或内部值的更昂贵的克隆。
T::foo(&s)当固有实现foo和特征实现同时存在时是必要的:
// in addition to your definitions this exists
impl S {
fn foo(&self) {
println!("S")
}
}
S::foo(&s); // -> prints S
T::foo(&s); // -> prints XXX
Run Code Online (Sandbox Code Playgroud)
<S as T>::foo(&s)当您组合最后两种情况时,您可以使用完全限定语法。
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |