重构了一下，以支持算式