代码之家  ›  专栏  ›  技术社区  ›  Rorschach

在标准钩子中使用参数运行函数

  •  0
  • Rorschach  · 技术社区  · 7 年前

    运行带有参数的函数的最佳方法是什么,例如通常使用参数运行的函数 run-hook-with-args after-save-hook .

    some-function 救钩后 在这里,但允许它有一个额外的参数。

    (defun some-function (&optional arg)
      (if arg 'do-this 'otherwise-do-this))
    
    ;; how to run `some-function' with argument here?
    (add-hook 'after-save-hook 'some-function nil 'local)
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   phils    7 年前

    所以您得到了类似这样的东西(我更改了函数名以减少混淆)。

    (add-hook 'after-save-hook 'my-function nil 'local)
    

    after-save-hook 电话 my-function 它向它传递一个论点。

    首先,你不能直接这么做,原因很明显 是一个普通的钩子,因此运行方式不提供任何传递参数的工具。

    你想干什么就干什么 .

    创建一个函数,它可以满足您的需要,如下所示:

    (add-hook 'after-save-hook (apply-partially 'my-function ARG) nil 'local)
    

    但是,在以后检查和操作钩子时,这些方法非常混乱,所以我建议不要这样做。

    老实说,最干净的方法是非常简单地定义一个完成所需操作的命名函数,然后添加 那个

    (defun my-function-do-this ()
      "Do This"
      'do-this)
    
    (add-hook 'after-save-hook 'my-function-do-this nil 'local)
    
    推荐文章