Skip to content

Instantly share code, notes, and snippets.

@QuadFlask
Created March 17, 2016 11:46
Show Gist options
  • Save QuadFlask/03a697bbacb45cb53c77 to your computer and use it in GitHub Desktop.
Save QuadFlask/03a697bbacb45cb53c77 to your computer and use it in GitHub Desktop.
러스트 튜토리얼 따라하기
extern crate rand; // Cargo.toml 에 정의한 디팬던시를 가져오기 위해 extern crate 키워드로 가져오기
use std::io; // 임포트
use std::cmp::Ordering;
use rand::Rng;
fn main() {
println!("Guess the number"); // 기본적으론 함수 호출은 그냥 노말하게 호출, 느낌표는 매크로를 호출
let secret_number = rand::thread_rng().gen_range(1, 101); // 상수에 바인딩.
loop { // 루프
println!("Please input your guess. (scret number is {})", secret_number); // {}로 리플레이서를 대신한다
let mut guess = String::new(); // 새로운 스트링을 뮤터블 상수(즉 변수)에 바인딩
io::stdin().read_line(&mut guess)
.expect("Failed to read line"); // 뮤터블 상수에 값을 넣고, 실패시 expect에 들어간 스트링 출력
// (read_line의 함수 호출 결과는 Result 라는 오브젝트인데, 이라인처럼 expect 같은 함수 호출을 안하면 컴파일시 워닝이 뜸)
let guess: u32 = match guess.trim().parse() { // 변수 쉐도잉이라고 하는데... 굳이 guess_str, guess_int 이런식으로 할 필요 없이 변수 이름 하나로 퉁치기...??
Ok(num) => num,
Err(_) => continue,
}; // 매치는 어떤 이넘 타입에 대해 패턴 매칭을 수행하는듯
println!("you guessd: {}", guess);
match guess.cmp(&secret_number) { // 왜 함수에 값을 전달할때 &가 필요할까?
Ordering::Less => println!("Too small!"), // 람다 표현식처럼 사용
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break; // 루프 끝내기
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment