commentaries

클로저란 무엇인가?

컴퓨터 언어에서 클로저(Closure)는 일급 객체 함수(first-class functions)의 개념을 이용하여 스코프(scope)에 묶인 변수를 바인딩 하기 위한 일종의 기술이다. 기능상으로, 클로저는 함수를 저장한 레코드(record)이며, 스코프(scope)의 인수(Factor)들은 클로저가 만들어질 때 정의(define)되며, 스코프 내의 영역이 소멸(remove)되었어도 그에 대한 접근(access)은 독립된 복사본인 클로저를 통해 이루어질 수 있다.

def greet(name):
    # inner function
    def display_name():
        print("Hi", name)
    
    # call inner function
	  return display_name

# call outer function
c = greet("John")  
c()

# Output: Hi John

러스트의 클로저는 다른 언어에서의 클로저와 어떤 점에서 다른가?

사용례

struct City { name: String,
population: i64, country: String, ...
}
fn sort_cities(cities: &mut Vec<City>) 
{cities.sort(); // error: how do you want them sorted?}

  /// Helper function for sorting cities by population.
fn city_population_descending(city: &City) -> i64 
	{ -city.population}
	
fn sort_cities(cities: &mut Vec<City>) 
{ cities.sort_by_key(city_population_descending); // ok}

fn sort_cities(cities: &mut Vec<City>) 
{ cities.sort_by_key(|city| -city.population);}

이번 챕터에서는…

클로저 - 변수 캡쳐하기

// Start an animation that rearranges the rows in a table of cities.
function startSortingAnimation(cities, stat) {
// Helper function that we'll use to sort the table. // Note that this function refers to stat.
	function keyfn(city) {
		return city.get_statistic(stat); }
	if (pendingSort) 
		pendingSort.cancel();
// Now kick off an animation, passing keyfn to it. 
// The sorting algorithm will call keyfn later. 
endingSort = new SortingAnimation(cities, keyfn);
}