Okay, I've beat my head against a wall long enough, before I pass out it's time to call the pros from Dover.
I'm doing something that should be trivial, parsing a String into an integer. But it's been passed as an argument to a function, so presumably I've done something weird with references. It looks like it should work - I'm even converting the String to a str, and verifying its type.
use std::io;
use std::num::ParseIntError;
fn print_type_of<T>(_: &T) {print!("{}", std::any::type_name::<T>())} // Unstable.
fn main() {
let mut guess:String = String::new();
println!("Please input your guess: ");
let foo = io::stdin().read_line(&mut guess);
let bar = re_main(&guess);
}
fn re_main(maybe_number_str: &String) -> Result<i32, ParseIntError> {
// let maybe_number_str = "1234"; // This is a str, and works
// let maybe_number: Result<i32, ParseIntError> = maybe_number_str.parse::<i32>(); // Fails
// let maybe_number: Result<i32, ParseIntError> = maybe_number_str.as_str().parse::<i32>();
// let maybe_number: Result<i32, ParseIntError> = maybe_number_str.to_string().parse::<i32>();
// let fubar:&str = "1234"; // This is a str, and works
// let fubar:&str = &maybe_number_str; // This claims to be a str, but fails to parse
// let fubar:&str = &maybe_number_str.as_str(); // This claims to be a str, but fails to parse
// This block works, so it's clearly parsing a String.
// let maybe_number_str:String = "1234".to_string();
// let maybe_number: Result<i32, ParseIntError> = maybe_number_str.parse::<i32>();
// This block fails to parse?
let fubar:&str = &maybe_number_str.to_string();
let maybe_number: Result<i32, ParseIntError> = fubar.parse::<i32>();
print!("\tmaybe_number.type is: "); print_type_of(&maybe_number);
print!("\n\tmaybe_number_str.type is: "); print_type_of(&maybe_number_str);
print!("\n\tmaybe_number_str.val is: [{}]", &maybe_number_str);
print!("\n\tfubar.type is: "); print_type_of(&fubar);
print!("\n\tfubar.val is: [{}]\n\n", &fubar);
let new_number: i32 = match maybe_number {
Ok(123) => {println!("wow, I never expected this!"); 123},
Ok(new_number) => {println!("everything's fine here, how are you?"); new_number},
Err(e) => {println!("No! How could this happen?"); return Err(e)}
};
println!("\nGot Result of some kind, apparently returned: [{}]\n", new_number);
print!("new_number.type is: "); print_type_of(&new_number);
Ok(42i32)
}
So given a String as function-parameter, how do I convert it to int? What am I missing? Anything greatly appreciated.