본문 바로가기

Rust

Rust Closure

클로저는 바깥쪽 함수에 속한 데이터를 사용할 수 있다. 이것을 변수 캡처라고 말한다. 클로저를 사용할때는 ||기호를 붙인다. ||기호안에는 쓰고싶은 단어를 자유롭게 넣을수 있다 예를들어 |city|, |monster| 이렇게

 

 

eg) 1. City 스트럭트에 있는 변수 monster_attacks_risk: f64타입을 외부에서 사용하고 싶다

struct City {
    name: String,
    population: i64,
    country: String,
    monster_attacks_risk: f64,
}

struct Preference {
    acceptable_monster_risk: f64,
}

 

 

2. fn타입은 함수만 받을 수 있는데  Fn트레이드를 사용하면 외부에서 함수와 클로저를 모두 받을 수 있다.

fn count_selected_cities<F>(cities: &Vec<City>, test_fn: F) -> usize
  	// count_selected_cities함수 타입을 제네릭으로 수정해서 test_fn인수에 임의의 타입 F를 받는다.
  	
where
	// Fn트레이드를 사용해서 함수와 클로저를 외부에 있는 다른 함수에서 사용할 수 있다.
    F: Fn(&City) -> bool,
{
    let mut count = 0;
    for city in cities {
        if test_fn(city) {
            count += 1;
        }
    }
    count
}

 

 

3. main함수에 앞에서 본  Fn 트레이드를 사용한 외부함수인 count_selected_cities함수와 함수에 속한  |city| 클로저로 모두 불러올 수 있다.

fn main() {
    let my_cities = vec![
        City {
            name: "New York".to_string(),
            population: 8000000,
            country: "USA".to_string(),
            monster_attacks_risk: 0.2,
        },
        City {
            name: "Tokyo".to_string(),
            population: 9000000,
            country: "Japan".to_string(),
            monster_attacks_risk: 0.1,
        },
        
    ];
    let preference = Preference {acceptable_monster_risk: 0.1};
    let limit = preference.acceptable_monster_risk;
    // 외부에 있는 count_selected_cities함수와 |city|클로저를 받아왔다. 
    let n = count_selected_cities(&my_cities, |city| city.monster_attacks_risk > limit); 
}

 

1.fn 타입 (함수만 받는다)

fn(&City) -> bool 

 

2. Fn 트레이트 (함수와 클로저를 모두 받는다)

Fn(&City) -> bool

 

 

https://www.yes24.com/Product/Goods/116789691

 

프로그래밍 러스트 - 예스24

『러스트 프로그래밍 공식 가이드』보다 더 친절하게, 한층 더 고급 기능까지 다룬다!이 책은 메모리 안전성과 신뢰할 만한 동시성에 예측 가능한 성능을 더한 러스트의 기능이 어떤 식으로 메

www.yes24.com

 

'Rust' 카테고리의 다른 글

Rust Mutex 스레드  (0) 2024.01.27
자바스크립트 러스트 클로저 비교, 메모리관리  (0) 2024.01.26
러스트 impl 트레이트 반환타입  (0) 2024.01.16
러스트 제네릭 스트럭트  (0) 2024.01.15
러스트 모듈(pub mod)  (0) 2024.01.09