STUDY/Rust

Rust - 25. 고급 기능 (3) 고급 함수와 클로저, 매크로

sinawi95 2024. 3. 31. 14:31
728x90

너무 길어서 한번 더 끊음. 매크로 부분은 이해가 안가서 그냥 빠르게 읽고 넘어갈예정임


1.. 고급 함수와 클로저

1.1. 함수 포인터

fn add_one(x: i32) -> i32 {
    x + 1
}

fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 {
    f(arg) + f(arg)
}

fn main() {
    let answer = do_twice(add_one, 5);

    println!("The answer is: {}", answer);
}
  • 일반함수를 함수에 전달할수 있음.
  • 새로운 클로저를 정의하는 대신 이미 정의된 함수를 전달하고 싶을때 사용
  • 매개변수에 fn  타입으로 정의하면됨.

1.2. 클로저 반환

클로저는(fn 포함) 반환 타입으로 사용될수 없음

  • 트레이트 객체에 감싸서 반환하면 됨

2. 매크로

매크로가 필요한 이유

  • 메타 프로그래밍
    • 코드 양을 줄이는데 유용함. 수동으로 작성한 코드보다 더 많은 코드를 생성함
  • 개수가 가변적인 매개변수를 사용할수 있음

 

선언적 (declarative) 매크로: macro_rules! 사용

  • println!, vec! 이거 보면 됨

절차적 (procedural) 매크로

  1. 구조체와 열거형에 사용되는 derive 속성이 추가된 코드를 지정하는 커스텀 파생 매크로, #[derive]
  2. 매크로 모든 아이템에 사용 가능한 커스텀 속성을 정의하는 속성형 (attribute-like) 매크로
  3. 함수 호출처럼 보이지만 지정된 토큰을 인수로써 조작하는 함수형 (function-like) 매크로

https://doc.rust-kr.org/ch19-00-advanced-features.html

 

https://doc.rust-kr.org/ch19-05-advanced-functions-and-closures.html