在被cl-letf
覆盖的函数中调用原始函数可以通过以下步骤实现:
symbol-function
函数获取被覆盖函数的原始定义。例如,如果被覆盖的函数是my-function
,可以使用(symbol-function 'my-function)
来获取原始定义。cl-letf
覆盖的函数中,通过调用保存的原始函数变量来调用原始函数。例如,如果保存原始函数定义的变量是original-function
,则可以使用(funcall original-function args)
来调用原始函数,其中args
是传递给原始函数的参数。下面是一个示例代码:
(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方言可能有不同的语法和函数名称,但基本思路是相同的。
小程序云开发官方直播课(应用开发实战)
小程序云开发官方直播课(应用开发实战)
云+社区技术沙龙[第14期]
云+社区技术沙龙[第22期]
云+社区技术沙龙[第1期]
T-Day
serverless days
云+社区技术沙龙 [第31期]
云+社区技术沙龙[第29期]
云+未来峰会
领取专属 10元无门槛券
手把手带您无忧上云