<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def eval(self, script, numkeys, *keys_and_args):
 """ Run a lua script against the key. Doesn't support multi-key lua operations because we wouldn't be able to know what argument to namespace. Also, redis cluster doesn't really support multi-key operations. :param script: str A lua script targeting the current key. :param numkeys: number of keys passed to the script :param keys_and_args: list of keys and args passed to script :return: Future() """

        with self.pipe as pipe:
            keys_and_args = [a if i >= numkeys else self.redis_key(a) for i, a
                             in enumerate(keys_and_args)]
            return pipe.eval(script, numkeys, *keys_and_args)