完善canonical方法