首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在被cl-letf覆盖的函数中调用原始函数?

在被cl-letf覆盖的函数中调用原始函数可以通过以下步骤实现:

  1. 首先,使用symbol-function函数获取被覆盖函数的原始定义。例如,如果被覆盖的函数是my-function,可以使用(symbol-function 'my-function)来获取原始定义。
  2. 将获取到的原始函数定义保存到一个变量中,以便后续调用。
  3. 在被cl-letf覆盖的函数中,通过调用保存的原始函数变量来调用原始函数。例如,如果保存原始函数定义的变量是original-function,则可以使用(funcall original-function args)来调用原始函数,其中args是传递给原始函数的参数。

下面是一个示例代码:

代码语言:txt
复制
(defun my-function ()
  (message "Original function"))

(let ((original-function (symbol-function 'my-function)))
  (cl-letf (((symbol-function 'my-function)
             (lambda ()
               (message "Modified function")
               (funcall original-function))))
    (my-function)))

在上述示例中,首先定义了一个名为my-function的原始函数。然后,使用let表达式将原始函数保存到original-function变量中。接下来,使用cl-letf覆盖my-function的定义,将其替换为一个新的函数,该新函数在调用时会先输出"Modified function",然后再调用原始函数。最后,通过调用(my-function)来测试覆盖后的函数,它会输出"Modified function"和"Original function"。

请注意,上述示例中的代码是以Emacs Lisp为例,实际上不同的Lisp方言可能有不同的语法和函数名称,但基本思路是相同的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券