diff --git a/src/variables.md b/src/variables.md index 9e59350da130d..cf2b02dbe6923 100644 --- a/src/variables.md +++ b/src/variables.md @@ -1,21 +1,21 @@ # Variables -A _variable_ is a component of a stack frame, either a named function parameter, +A _variable_ is a component of a stack frame. That component can be a named function parameter, an anonymous [temporary](expressions.html#lvalues-rvalues-and-temporaries), or a named local variable. A _local variable_ (or *stack-local* allocation) holds a value directly, allocated within the stack's memory. The value is a part of the stack frame. -Local variables are immutable unless declared otherwise like: `let mut x = ...`. +Local variables are immutable unless declared otherwise. For example: `let mut x = ...`. Function parameters are immutable unless declared with `mut`. The `mut` keyword -applies only to the following parameter (so `|mut x, y|` and `fn f(mut x: +applies only to the following parameter. For example: `|mut x, y|` and `fn f(mut x: Box, y: Box)` declare one mutable variable `x` and one immutable -variable `y`). +variable `y`. Methods that take either `self` or `Box` can optionally place them in a -mutable variable by prefixing them with `mut` (similar to regular arguments): +mutable variable by prefixing them with `mut` (similar to regular arguments). For example: ```rust trait Changer: Sized { @@ -24,8 +24,8 @@ trait Changer: Sized { } ``` -Local variables are not initialized when allocated; the entire frame worth of -local variables are allocated at once, on frame-entry, in an uninitialized +Local variables are not initialized when allocated. Instead, the entire frame worth of +local variables are allocated, on frame-entry, in an uninitialized state. Subsequent statements within a function may or may not initialize the local variables. Local variables can be used only after they have been initialized; this is enforced by the compiler.