详细写了一些函数