代码重构，编译通过