5

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

(start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS)

例如:

(start-process "program-name" nil "program-name" "-p1" "-p2" "-p3" "program-name")

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

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

(start-process "program-name" nil "program-name" program-args "program-name")
4

1 回答 1

7

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

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

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

(apply 'start-process
  (append (list "program-name" nil "program-name")
          program-args
          (list "program-name")))
于 2013-06-12T22:01:45.610 回答