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) 매크로
- 구조체와 열거형에 사용되는 derive 속성이 추가된 코드를 지정하는 커스텀 파생 매크로, #[derive]
- 매크로 모든 아이템에 사용 가능한 커스텀 속성을 정의하는 속성형 (attribute-like) 매크로
- 함수 호출처럼 보이지만 지정된 토큰을 인수로써 조작하는 함수형 (function-like) 매크로
https://doc.rust-kr.org/ch19-00-advanced-features.html
https://doc.rust-kr.org/ch19-05-advanced-functions-and-closures.html