将列表传递给 &rest args

lkj*_*hfj 5 emacs elisp

如何将参数列表传递给start-process第 4 个参数(PROGRAMS-ARGS)

(start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS)
Run Code Online (Sandbox Code Playgroud)

例如:

(start-process "program-name" nil "program-name" "-p1" "-p2" "-p3" "program-name")
Run Code Online (Sandbox Code Playgroud)

我想通过在列表中收集参数并将列表变量传递给函数参数来做同样的事情,但它不起作用:

(setq program-args (list "-p1" "-p2" "-p3"))

(start-process "program-name" nil "program-name" program-args "program-name")
Run Code Online (Sandbox Code Playgroud)

Nik*_*yar 6

apply在这种情况下你应该使用:

apply 带有参数的调用函数,就像 funcall 一样,但有一个区别:最后一个参数是一个对象列表,它们作为单独的参数传递给函数,而不是单个列表。

即,在您的情况下,正确的代码是:

(apply 'start-process
  (append (list "program-name" nil "program-name")
          program-args
          (list "program-name")))
Run Code Online (Sandbox Code Playgroud)