我刚刚开始学习Rust。虽然去了它的一些例子,我不能理解引用的行为(我松散地将其与指针联系起来)。
fn main(){
let mut s = String::from("abc");
DoStuff(&mut s);
}
fn DoStuff(reff : &mut String){
reff.push_str("xyz");
(*reff).push_str("xyz");
// In the above two lines, why they perform similar actions?
// as reff and *reff are different types.
// *reff should only be able to call pust.str(). But how reff can also call it?
// reff = String::from("dsf"); --> Why this will give compile error
// if reff & (*reff) behaves somewhat similar for us
}
在上面的例子中,两行
reff.push_str("xyz");
(*reff).push_str("xyz");
行为相似。
As,pust_str()
是来自String
的方法。根据我的理解,应该只有(*reff)
才能叫它。然而,reff
也能够调用它。
我怎么能理解这种意外的行为?
实现了Deref trait的类型会自动解引用。
这样你就不用一直写(*reff).
了