I am trying to write a simple function in Rust that will ask user a question expecting answer of "you" or "me". It should return a boolean value or ask again if the user answers wrong. I came up with:
fn player_starts() -> bool {
println!("Who will start (me/you)");
loop {
let input = readline::readline(">");
match input {
Some("me") => return true,
Some("you") => return false,
_ => None,
}
}
}
What I get is:
error: mismatched types:
expected `collections::string::String`,
found `&'static str`
(expected struct `collections::string::String`,
found &-ptr) [E0308]
Is there some way to coerce the literal to work here or is there some better way to achieve my goal?
This should work:
Note the expression in the match statement, where we convert from an
Option<String>
to anOption<&str>
.The way you usually convert a
&str
to aString
isto_owned
, e.g.However, you can't do pattern matching on a
String
. You couldexpect
a success, get a&str
from theString
then pattern match on that: