改版,以前的方法太乱了