avoid allocate new function object