about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThomas Karpiniec <tk@1.21jiggawatts.net>2015-05-24 13:54:05 +1000
committerThomas Karpiniec <tk@1.21jiggawatts.net>2015-05-24 13:54:05 +1000
commit49597fcbf26736ac2b2f7d6beab27f42a44bf306 (patch)
tree0e4ef41834e707b5d07cd94ab68bbda2543f94cb
parent38a97becdf3e6a6157f6f7ec2d98ade8d8edc193 (diff)
downloadrust-49597fcbf26736ac2b2f7d6beab27f42a44bf306.tar.gz
rust-49597fcbf26736ac2b2f7d6beab27f42a44bf306.zip
book: explanation that String -> &str coercion doesn't happen for &str traits
-rw-r--r--src/doc/trpl/strings.md13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/doc/trpl/strings.md b/src/doc/trpl/strings.md
index c354fd09edd..656b9d49126 100644
--- a/src/doc/trpl/strings.md
+++ b/src/doc/trpl/strings.md
@@ -49,6 +49,18 @@ fn main() {
 }
 ```
 
+This coercion does not happen for functions that accept one of `&str`’s traits
+instead of `&str`. For example, [`TcpStream::connect`][connect] has a parameter
+of type `ToSocketAddrs`. A `&str` is okay but a `String` must be explicitly
+converted using `&*`.
+
+```rust
+TcpStream::connect("192.168.0.1:3000"); // &str parameter
+
+let addr_string = "192.168.0.1:3000".to_string();
+TcpStream::connect(&*addr_string); // convert addr_string to &str
+```
+
 Viewing a `String` as a `&str` is cheap, but converting the `&str` to a
 `String` involves allocating memory. No reason to do that unless you have to!
 
@@ -127,3 +139,4 @@ This is because `&String` can automatically coerce to a `&str`. This is a
 feature called ‘[`Deref` coercions][dc]’.
 
 [dc]: deref-coercions.html
+[connect]: ../std/net/struct.TcpStream.html#method.connect