2016-04-08 9 views
0

:Niçin bir String'e başvurmak a & str? Bu örnek kodda <a href="https://doc.rust-lang.org/std/string/struct.String.html" rel="nofollow">from the Rust documentation</a> yılında

fn takes_str(s: &str) { } 

let s = String::from("Hello"); 

takes_str(&s); 

tam olarak ne &s yerine &String bir &str hale gelmesine neden olur perde arkasında oluyor? Belgeleme, bazı dereferencing devam olduğunu önermek gibi görünüyor, ama ben * dereferencing için olduğunu düşündüm, & değil?

+2

Bkz. ['Deref 'coercions] (https://doc.rust-lang.org/book/deref-coercions.html). İkinci kod örneği neredeyse sahip olduğunuz şeydir. – emlai

+0

belki bu sizin için http://stackoverflow.com/questions/36437375/why-i-can-use-sort-by-key-with-a-vec Deref –

cevap

3

Burada neler oluyor deref coercions. Bunlar, diğer türlere yapılan referansların yerine kullanılacak Deref trait'u uygulayan türlere yapılan referanslara izin verir. Örneğinizin gösterdiği gibi, , Stringstr'a uygulandığı için &str'un her yerde kullanılabilir.

İlgili konular