ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Rust] 4.ownership(3). slice
    rust 2023. 1. 28. 19:42
    반응형

    Ownership Rule

     - value 는 owner 로 불리는 variable을 가지고 있다.

     - value의 owner에 해당하는 variable 은 하나만 존재한다.

     - owner 에 해당하는 varialble 이 scope 을 벗어나면 value는 drop 된다.

     

    이전에 ownership을 move 하지 않으면서 값을 전달하는 방법으로 value의 값만 참조하고 ownership은 갖지않는 reference 라는걸 알아봤는데 그와 비슷하게 ownership을 가지지 않는 데이터 타입으로 slice 가 있다.

    let s = String::from("hello");
    
    let slice = &s[0..2];
    let slice = &s[..2];
    let slice = &s[0..len];
    let slice = &s[..];

    rust의 .. 문법을 사용하여 다양하게 나타낼수 있고 규칙은 js의 slice 와 동일하며(시작인덱스 ~ 마지막인덱스+1) 하는일도 비슷하게 느껴지지만 이건 borrow 해온 값이기 때문에 s가 유효한 스콥내에서만 한다.

    fn main() {
        let mut s = String::from("hello world");
    
        let word = first_word(&s);
    
        s.clear(); // Error!
    
        println!("the first word is: {}", word);
    }
    
    fn first_word(s: &String) -> &str {
        let bytes = s.as_bytes();
    
        for (i, &item) in bytes.iter().enumerate() {
            if item == b' ' {
                return &s[0..i];
            }
        }
    
        &s[..]
    }

    위 코드 에서 word 는 s의slice 된 값이다. 즉 ownership 이 없는 reference 이며 reference 는 참조하고 있는 value 가 유효해야 한다.

    근데 아래줄에서 word가 사용되기 이전에 s 가 clear 되자 rust 에서는 에러는 보여준다.

Designed by Tistory.