about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorSteve Klabnik <steve@steveklabnik.com>2015-04-21 11:18:33 -0400
committerSteve Klabnik <steve@steveklabnik.com>2015-04-21 16:18:51 -0400
commitf78ee1aff1184c08b8d82f96fb9077586d1a4ed0 (patch)
treec9ffa02366179ed197773faa532b5057f2cd7de5 /src
parent3860240b0e124f38483ea4bd070b61d362871ece (diff)
downloadrust-f78ee1aff1184c08b8d82f96fb9077586d1a4ed0.tar.gz
rust-f78ee1aff1184c08b8d82f96fb9077586d1a4ed0.zip
Document functional update syntax
Fixes #24639
Diffstat (limited to 'src')
-rw-r--r--src/doc/trpl/structs.md30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/doc/trpl/structs.md b/src/doc/trpl/structs.md
index ff249d6043c..fcf928e427c 100644
--- a/src/doc/trpl/structs.md
+++ b/src/doc/trpl/structs.md
@@ -87,3 +87,33 @@ fn main() {
     point.y = 6; // this causes an error
 }
 ```
+
+# Update syntax
+
+A `struct` can include `..` to indicate that you want to use a copy of some
+other struct for some of the values. For example:
+
+```rust
+struct Point3d {
+    x: i32,
+    y: i32,
+    z: i32,
+}
+
+let mut point = Point3d { x: 0, y: 0, z: 0 };
+point = Point3d { y: 1, .. point };
+```
+
+This gives `point` a new `y`, but keeps the old `x` and `z` values. It doesn’t
+have to be the same `struct` either, you can use this syntax when making new
+ones, and it will copy the values you don’t specify:
+
+```rust
+# struct Point3d {
+#     x: i32,
+#     y: i32,
+#     z: i32,
+# }
+let origin = Point3d { x: 0, y: 0, z: 0 };
+let point = Point3d { z: 1, x: 2, .. origin };
+```