[Rust] 여러가지 메소드들

0xDave·2022년 6월 27일
0

Rust

목록 보기
10/16
post-thumbnail

오늘 예제에서 나온 여러 메소드들을 정리하고자 한다.

예제 코드


use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1..101);

    loop {
        println!("Please input your guess.");

        let mut guess = String::new();

        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");

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

        println!("You guessed: {}", guess);

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        }
    }
}

1. trim()


let s = " Hello\tworld\t";

assert_eq!("Hello\tworld", s.trim());

trim 메소드는 앞, 뒤의 공백을 모두 제거해준다.

2. parse()


core::str
pub fn parse<F>(&self) -> Result<F, F::Err>
where
    F: FromStr,

parse는 타입을 바꿔주는 메소드다. 아래 예제를 보면 &str 인 "4"를 앞에서 지정한 u32 타입으로 바꿔주는 것을 볼 수 있다.

let four: u32 = "4".parse().unwrap();

assert_eq!(4, four);

3. unwrap()


let x: Result<u32, &str> = Ok(2);
assert_eq!(x.unwrap(), 2);
let x: Result<u32, &str> = Err("emergency failure");
x.unwrap(); // panics with `emergency failure`

unwrap은 Ok를 값으로 받으면 그 안에 있는 데이터를 꺼내주고, Err를 값으로 받으면 panic 상태가 된다.

4. cmp()


core::cmp::Ord
pub fn cmp(&self, other: &Self) -> Ordering

cmp는 인자를 비교해주는 메소드로 Ordering 타입을 리턴하는데, 이 때 Ordering은 둘 중 하나가 많거나 적은지 혹은 같은지 알려주는 enum이다. 아래 예제를 보면 직관적으로 이해할 수 있다.

use std::cmp::Ordering;

assert_eq!(5.cmp(&10), Ordering::Less);
assert_eq!(10.cmp(&5), Ordering::Greater);
assert_eq!(5.cmp(&5), Ordering::Equal);

cmp 설명에 나오는 selfSelf 의 차이점이 무엇인지 갑자기 궁금해졌다. stackOverflow의 친절한 답변에 따르면

  1. selfself: Self 의 줄임말이다.
    &selfself: &Self 의 줄임말이다.
    &mut selfself: &mut Self 의 줄임말이다.

  2. 메소드 인자로 받는 Self 는 메소드의 타입을 받아올 때 좀 더 직관적으로 코딩할 수 있게 도와주는 문법적 장치다.

  3. 즉, self 는 메소드 인자 그 자체를 말하는 것이고 Self 는 받아온 메소드 인자의 타입을 말한다.

profile
Just BUIDL :)

0개의 댓글