另一种实现，但貌似效果比第一种差