【问题标题】:Processing command-line-args-left?处理命令行参数左?
【发布时间】:2010-02-15 03:56:20
【问题描述】:

我有一个函数,我在其中传递一个文件名,后跟几个整数参数。问题是我现在想将我的代码作为 Unix 脚本运行,使用 command-line-args-left 从命令行传递参数。当 #1 调用 process-args 时,会创建一个包含所有值的列表。在 #2 中,列表的列表{例如。 ((1 2 3)) } 在进入 process-args 时创建。保持代码通用性以便我可以在同一个函数中处理 #1#2 这两种情况的最佳方法是什么?

(defun process-args (filename &rest cols) ...) (过程参数文件名 1 2 3); #1 (process-args (car command-line-args-left) (cdr command-line-args-left)); #2

这是我正在测试的一些工作示例代码:

#!/usr/bin/emacs --script (defun process-args (filename &rest cols) (princ (concat "脚本名称: " file "\n")) (princ (concat "文件参数:" 文件名 "\n")) (princ“其他参数值:”) (校长) (princ "\n是列表:") (princ (listp cols)) (princ "\n----------\n") (虽然列 (princ (car cols)) (原则“...”) (setq cols (cdr cols))) (princ "\n")) (打印“===== 版本 #1:基本情况 - 变为 (1 2 3) =====”) (process-args (car command-line-args-left) 1 2 3) (打印“=====版本#2:将列表的cdr作为一个字符串传递=====”) (process-args (car command-line-args-left) (mapconcat 'identity (cdr command-line-args-left) "")); (打印“=====版本#3:列表列表测试 - 变为((1 2 3))=====”) (process-args (car command-line-args-left) '(1 2 3))

【问题讨论】:

    标签: elisp


    【解决方案1】:

    您可以尝试使用'apply 来展平最后一个参数(如果列表中没有最后一位,则为'apply' is a list of arguments, use'funcall` 的最后一个参数)。

    所以,上面的版本 #3 会这样处理:

    (apply 'process-args (car command-line-args-left) '(1 2 3))
    

    (其他调用不会改变。)

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 2010-09-13
      • 2014-12-19
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多