2016-07-09 5 views
0

내가 입력 한 추측이 유효한 숫자 (이 게임 운동을 추측 녹에서의) 여부를 테스트 다음과 일치하는 조건이 있습니다녹 경기

let mut guess = String::new(); 
io::stdin().read_line(&mut guess).expect("Failed to read"); 
let guess: u32 = match guess.trim().parse() { 
    Ok(num) => num, 
    Err(_) => continue, 
}; 

가 어떻게되는지 확인하기 위해 경기를 연장 할을 숫자가 음수이거나 0 (이 경우 오류가 발생 함) 숫자가 양수이면 정상적으로 처리됩니까?

Ok 케이스의 num에 if를 추가하려고 시도했지만 오류가 발생합니다 (아마도 num은 추정치에 바인딩되어 있기 때문에) 또한 관용적으로 보이지는 않습니다.

답변

3

matchguarded 수 있습니다 : 나는 빠른 의심

let guess: u32 = match guess.trim().parse() { 
    Ok(num) if num > 0 => num, 
    Ok(num) => return Err(whatever), 
    Err(_) => continue, 
}; 
+0

. 음수를 전달할 때 음수 인 경우 (두 번째 확인)는 작동하지 않습니다. 대신 Err (_) 조건이 계속 표시됩니다. 문자열로 음수를 구문 분석이 작동하지 않기 때문에 또는 뭔가 잘못하고 있습니까? – KDN

+0

하지만 당신은'u32'로 파싱합니다. 어쨌든 네거티브 일 수는 없으므로 구문 분석 오류가 발생합니다. 그게 네가 원하는거야? – mcarton

+0

당신 말이 맞아요, 어리석은 저, u32를 보지 못했습니다. – KDN