Oh, whoops, forgot to reply.

The `self` object would get frozen for the period of the borrow, that is, while the returned `&str` is valid (this is what the named lifetime `'a` does, connect the return value to the `self` object so that the compiler knows how to connect freezing up). This means that 

```rust
let mut r = Robot::new();
let name = r.name();
r.reset_name();
println!("Name is {}", name);
```

is invalid, but

```rust
let mut r = Robot::new();
{ // scope to restrict the borrow
    let name = r.name();
    println!("Name is {}", name);
}
r.reset_name();
```

is fine. One can get the same behaviour as the `~str` one via the following (valid) program:


```rust
let mut r = Robot::new();
let name = r.name().to_owned(); // .to_owned is the only change
r.reset_name();
println!("Name is {}", name);
```

that is, returning the slice is strictly more flexible.