Closure라는 가상의 클로저 타입을 만들고 필드가 어떤식으로 되는지 살펴보자



일단 Closure 내부에 Closure를 그대로 박으면 에러가 터짐





재귀타입이 돼서 컴파일러가 타입 크기를 계산할수가 없게됨



대신 &나 Arc등의 공유참조타입으로 우회하면 컴파일은 가능해짐 문제는 이걸로는 FnMut나 FnOnce를 대응할수 없는데다가 &는 스택 수명따라가고 Arc등은 느림






결국 값으로는 못만들고 참조는 제약이 심해서 자기안에 자기 타입을 넣고 여타 클로저처럼 쓰는건 굉장히 어렵다


하지만 클로저 안에서 자신의 환경변수를 가지고 재귀를 하는거 자체는 얼마든지 가능함 그냥 멤버 메소드 그대로 호출하면됨





하지만 불행하게도 이건 아직 러스트 언어 스펙에 존재하지 않는 기능임


현 시점에서 클로저 재귀를 쓰고싶으면 루프를 쓰던가 함수로 만들던가하자