使用rust引用而不取消引用



我刚刚开始学习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).

相关内容

  • 没有找到相关文章

最新更新