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
'STUDY > Rust' 카테고리의 다른 글
Rust - 27. 최종 프로젝트 (2) - 러스트 공식문서 끝 (1) | 2024.04.07 |
---|---|
Rust - 26. 최종 프로젝트 (1) (1) | 2024.04.01 |
Rust - 24. 고급 기능 (2) 고급 트레이트, 고급 타입 (0) | 2024.03.31 |
Rust - 23. 고급 기능 (1) Unsafe RUST (1) | 2024.03.31 |
Rust - 22. 패턴과 매칭 (0) | 2024.03.26 |