【问题标题】:passing and calling multiple arguments in tcl在 tcl 中传递和调用多个参数
【发布时间】:2014-04-06 03:17:47
【问题描述】:

我想做一个可以接受N 个参数的tcl 过程。我想从 bat 文件中调用它。 这是我写的程序:

proc multi_argu {args} {
foreach {path rev_start rev_end} $args {
        puts "path-> $path"
        puts "rev_start-> $rev_start"
        puts "rev_end-> $rev_end"
    }
}
multi_argu $argv

现在我从我的 bat 文件中将其称为

tclsh multi_argu.tcl 1 2 3

但结果是

path-> 1 2 3
rev_start->
rev_end->

在我的 tcl 文件末尾,我打电话给multi_argu $argv,我认为这是罪魁祸首。但是,我不知道如何为多个参数执行此步骤。任何人都可以提供任何意见吗?

【问题讨论】:

    标签: batch-file arguments tcl


    【解决方案1】:

    由于$argv 是一个列表,您将一个列表变量传递给您的proc,这意味着$args 成为一个列表,包含一个列表元素。

    在 tcl 8.5 中,您可以对调用 proc 的方式进行细微更改:

    multi_argu {*}$argv
    

    {*} 将枚举列表中的项目,因此$args 成为项目列表。

    否则,我猜你可以使用类似的东西:

    foreach {path rev_start rev_end} [lindex $args 0] { ... }
    

    这种方式违背了使用args 作为proc 参数的目的。在这种情况下,您也可以使用另一个变量名。

    【讨论】:

      【解决方案2】:

      您必须将 multi_argu 定义为 proc 吗?您的 .bat 文件可以只调用 multi_argu.tcl 其中包含:

      puts "Calling $argv0 with $argc arguments: $argv..."
      
      foreach {path rev_start rev_end} $argv {
              puts "path-> $path"
              puts "rev_start-> $rev_start"
              puts "rev_end-> $rev_end"
          }
      

      现在当你从你的 bat 文件中调用它时

      tclsh multi_argu.tcl 1 2 3
      

      输出是:

      Calling multi_argu.tcl with 3 arguments: 1 2 3...
      path-> 1
      rev_start-> 2
      rev_end-> 3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多