Why does Option<String>.as_ref() not deref to Option<&str>?

Viewed 2069

I expect the same result for both of these code samples:

let maybe_string = Some(String::from("foo"));
let string = if let Some(ref value) = maybe_string { value } else { "none" };
let maybe_string = Some(String::from("foo"));
let string = maybe_string.as_ref().unwrap_or("none");

The second sample gives me an error:

error[E0308]: mismatched types
 --> src/main.rs:3:50
  |
3 |     let string = maybe_string.as_ref().unwrap_or("none");
  |                                                  ^^^^^^ expected struct `std::string::String`, found str
  |
  = note: expected type `&std::string::String`
             found type `&'static str`
1 Answers
Related