아래와 같은 상황에서 removeReview 함수를 실행하면 해당 값이 초기화 돼야하는데 여전히 남아있는 버그가 있는 것 같습니다. 거의 유사한 별도의 테스트 코드를 작성해서 테스트해볼 때는 이상하게도 정상작동을 합니다. 테스트코드와 차이가 없어보이는데 왜 이런 현상이 있는건지 도저히 알 길이 없어서 문의를 남깁니다. removeReview의 실행후 트랜잭션 상태는 0x01 성공 상태인데 그렇다면 delete도 실행되었단건데 그렇다면 removeReview함수를 재차 실행했을 때 require(r.status != Type.ReviewStatus.NONE, “Review does not exist”); 이 줄에 의해 revert가 떠야하는데 초기화되지 않았었기 때문에 계속 성공이 뜨고 상태를 조회해보면 여전히 초기화되지 않고 남아있습니다. 상태가 delete 되지 않고 유지 돼있기 때문에 계속 removeReview함수 실행이 성공이 뜨고 있습니다. 동일 컨트랙트의 다른 함수에서의 delete는 정상작동합니다. 이 함수의 delete만 문제가 되는 상황입니다.
For structs, it assigns a struct with all members reset. In other words, the value of a after delete a is the same as if a would be declared without assignment, with the following caveat:
delete has no effect on mappings (as the keys of mappings may be arbitrary and are generally unknown). So if you delete a struct, it will reset all members that are not mappings and also recurse into the members unless they are mappings. However, individual keys and what they map to can be deleted: If a is a mapping, then delete a[x] will delete the value stored at x .