지금 구조가 이럼

struct Entity

struct World(vec<Entity>)
impl World {
pub fn add_entity(self, entity: Entity) -> Self {
self.0.push(entity);
self
}
}

World가 여러 Entity를 가지고있고 add_entity 함수로 entity를 추가할 수 있음. 근데 체인메서드라서
world.add_entity(a).add_entity(b).add_entity(c)
위처럼 호출 할 수 있음

이제 이걸 for문에서 사용함

for entity in entities {
world.add_entity(entity);
}

이렇게하면 add_entity가 한 루프내에서 world를 소모해서 소유권 문제로 컴파일이 불가능함

그래서 다음같이 해결해봤음

let world = Rc::new(world);
for entity in entities {
world.add_entity(entity);
}

이러면 되기는 함
근데 이 이후에 world를 다시 소모하는 애가 나옴

WorldSystem::new(world);

이러면 world는 Rc 자료형이라 안의 내용을 꺼낼 수 없어서 컴파일할 수 없음
비슷하게 RefCell도 사용해보았는데 안됨

이런 경우에는 어떤식으로 해결하는게 좋을까?

*추가
World, Entity, WorldSystem을 수정하지 않고 해결하고싶음

*해결

Iterator의 fold 함수를 이용해서 해결했음
let mut world = entities.into_iter().fold(World::new(), |world, entity| world.add_entity(entity));

댓글에 Rc 값을 뽑아오는 법도 있는데 이건 시도 안해봄

https://doc.rust-lang.org/std/rc/struct.Rc.html#method.try_unwrap