gpt4 book ai didi

variables - Tcl $argc 和 $argv 变量

转载 作者:行者123 更新时间:2023-12-01 03:44:34 25 4
gpt4 key购买 nike

我对 tcl 有点陌生,但我必须编写一个看起来像这样的过程:

proc TestVerb { Data Data_txt } {
VERBATIM [format "// Data: $Data - $Data_txt"]
if { $argc == 2} {
VERBATIM {// SUCCESS //}
else {
exit 1
}

我这样调用 proc: TestVerb Switch"This is used for..."
proc 在一个不同的文件中,proc 调用在另一个文件中。它们似乎来源正确,因为如果我不使用 $argc 我会得到所需的输出但是一旦我使用 $argv$argc我收到以下编译错误:无法读取 $argv/$argc没有这样的变量

如果我用 $::argc 引用这个变量和 $::argv结果不正确。 $argv为空且 $argc 为 0

最佳答案

您似乎在这里做出了两个错误的假设:

  • 如果 proc 不使用特殊参数 args在其定义中(有关更多信息,请参见下文),它仅接受固定数量的参数 — 与其定义中使用的参数数量完全匹配。每个调用都由解释器检查,任何带有无效参数的调用都将在到达过程代码本身之前失败。

    你自己看:
    % proc foo {a b c} {}
    % foo
    wrong # args: should be "foo a b c"
    % foo 1
    wrong # args: should be "foo a b c"
    % foo 1 2 3 4
    wrong # args: should be "foo a b c"
    % foo 1 2 3
    %

    换句话说,只是不要试图检查传递给 proc 的参数数量。 :在您的程序被调用时,它已经被解释器检查过了。
  • argcargv全局变量控制从操作系统传递到执行 Tcl 脚本的 Tcl 解释器程序的内容。

    也就是说,当你调用类似
    $ tclsh myscript.tcl foo bar

    名为 argc 的变量将包含 2 和 argv将被设置为包含两个字符串的列表——“foo”和“bar”。

    换句话说,这些变量与单个程序无关。


  • 关于 args特殊参数:如果过程使用单词“args”作为其最后一个参数或将其作为唯一参数,则该参数将转换为一个列表,该列表消耗任意数量(包括零)的实际参数。

    所以你可以做
    proc foo {a b args} {}

    然后是您的 foo过程可以像 foo 1 2 一样被调用和 foo 1 2 3 4 5 6但不喜欢 foo x (因为 b 形式参数没有值(value))。

    在这样的过程中,您可以使用普通的列表命令(如 llengthlindex)来检查 args 中包含的任何内容。 .例如,电话 foo 1 2 3 4 5 6将设置 args通过调用 [list 3 4 5 6] 获得相同的值.

    关于variables - Tcl $argc 和 $argv 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28195727/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com