- 질문 게시판입니다.
Date | 24/04/17 15:48:38수정됨 |
Name | T.Robin |
Subject | Rust 프로그래밍: constructor 내부 closure에서 Self의 객체를 불러서 처리하기 |
Rust 도전 일주일차인 T.Robin입니다(아 응애에요). 대충 아래의 코드가 있습니다. struct S1 { element1: AAA, element2: BBB, } impl S1 { pub fn new()->Self { let result = Self { element1: Element1::new(), element2: Element2::new() } // 뭔가 이것저것...... result.element1.do_something( { let element1_weak_reference = result.element1.get_weak_reference().unwrap(); move || { // 여기가 문제 result.element2.do_something_else( element1_weak_reference.do_something() ); } }); // 완료 result } } 아마 눈치채셨겠지만, 이 코드는 빌드되지 않습니다. [//여기가 문제] 부분에서 result.element2가 closure 안쪽으로 이동해버려서, 마지막 "[//완료]" 부분에서는 result.element2가 아직 변수를 빌려준 상태로 남아있게 되어서 컴파일러가 투덜댑니다(요컨데, closure가 본문보다 더 오래 살아남을 수 있다....... 뭐 이런 내용입니다). 아예 unsafe 선언하고 C++ 스타일 raw pointer로 막무가내로 밀어부쳐 보기도 했습니다만 프로그램이 터지는걸 보면 이것도 답은 아닌 것 같습니다. 이 경우, 어떻게 처리해야 될까요? 0
이 게시판에 등록된 T.Robin님의 최근 게시물
|