宏的抽取，及修改部分BUG