충격.. rust는 코드블럭이 없군요..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
use std::io;
use std::cmp::Ordering;
use rand::Rng;
fn main() {
let secret_number = rand::thread_rng().gen_range(1,101);
println!("let's this about the correct number!");
println!("input number that you think correct!");
loop {
let mut guess = String::new();
io::stdin().read_line(&mut guess)
.expect("can't read input");
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
println!("input: {}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("less"),
Ordering::Greater => println!("greater"),
Ordering::Equal => {
println!("correct!");
break;
}
}
}
}
|
cs |
let : 변수 생성
mut: muttable - 수정가능
*rust는 기본적으로 imuttable이라 수정할 수 없다.
String: 표준 라이브러리가 제공하는 문자열 타입.
*String::new : String의 new 함수 호출 (정적 메서드)
read_line(String) : ios::Result 타입의 값 리턴
Result - enums(Ok, Err)
.expect: io::Result 타입의 인스턴스가 Err 값이라면 expect 메서드는 프로그램의 실행을 종료하고 expect 메서드에 인수로 전달한 메시지를 표시한다. Ok라면 expect 메서드는 Ok 값이 보관하고 있는 값만을 읽어와 리턴한다.
println!("input: {}", guess);
{}: 자리지정자. 문자열 후에 값을 입력하면 해당 값을 출력한다. (위의 경우엔 guess의 값)
trim: 공백과 줄바꿈 제거
parse: guess의 형식에 맞게 문자열 변경
match 값 {
패턴 => 실행 코드,
}
: C언어의 switch와 비슷함. 단, kotlin처럼 맨 마지막에 넣은 값을 반환한다고 생각하면 된다.
loop: 반복문. 무한히 반복된다. (단, break를 이용하면 탈출 가능)
match 함수 {
Ok(값) => 값
Err(_) => continue
}
match 표현식을 이용하여 .expect(메시지) 대신에 Result가 Ok면 값을 반환하고, Err일 경우에는 loop를 다시 진행하는 코드를 작성할 수 있다.
'공부 > rust' 카테고리의 다른 글
[rust] 크레이트를 이용해 필요한 기능 추가하기 (0) | 2021.05.20 |
---|---|
[rust] 디버깅 세팅 (0) | 2021.05.20 |