본문 바로가기
IT 일기/러스트(Rust) 노트

러스트 공부하기 5일차 #1

by Ryan Kim 2022. 11. 13.

참조 사용

fn main() {
let a = 42;
let r = &a; --> 참조 연산자
let b = a + *r; --> 역참조 연산자

pritnln("a + a = {}", b);

 

for item in &haystack {
  if *item == needle {
    println!("{}", item);
  }
}

고급 함수 정의

명시적인 수명 애너테이션 

fn add_with_lifetimes<'a, 'b>(i: &'a i32, j: &'b i32) -> i32 {

*i + *j

}

-<'a, 'b>는 두 개의 수명 변수 'a와 'b를 add_with_lifetimes() 범위 안에 선언한다. 수명 a, 수명 b라고 한다.

-i: &'a i32는 수명 변수 'a를 i의 수명으로 바인드한다. 이 구문은 "매개 변수 i는 수명 a를 가지는 i32 타입의 참조다"라고 읽는다.

러스트의 안전 검사는 모든 데이터 접근 시도가 유효한지 확인하는 수명 시스템에 토대를 두고 있다. 

프로그래머는 수명 에너테이션을 통해 자신의 의도를 선언할 수 있다.

 

제네릭 함수

fn add<T>(i: T, j: T) -> T {

i+j

}

특정 타입 대신 대문자가 있으면 제네릭 타입을 의미한다. 제네릭으로 상당한 코드 재사용이 가능하고, 강타입 언어의 사용성을 크게 높일 수도 있다. 

러스트의 모든 연산자는 트레이트로 정의된다. T타입이 반드시 덧셈을 지원해야 한다면, 트레이트 제약을 포함시켜야 한다. 

fn add<T: std::ops::Add<Output = T>>(i: T, j: T) -> T {

i + j

}

 

 

 

 

 

 

'IT 일기 > 러스트(Rust) 노트' 카테고리의 다른 글

러스트 공부하기 4일차  (0) 2022.11.09
러스트 공부하기 3일차  (0) 2022.11.08
오늘부터 러스트 공부 시작  (0) 2022.11.03