如何编写具有默认值和选项的 tcl 程序?

2024-02-26

我正在尝试编写一个 tcl 程序,它执行以下操作 -

proc myProc {arg1 def1} {arg2 def2} {
...
...
}

tcl> myProc -arg1 val1 -arg2 val2
arg1 variable has val1
arg2 variable has val2

tcl> myProc -arg1 val1
arg1 variable has val1
arg2 variable has def2

tcl> myProc -?
myProc -arg1 <value1> -arg2 <value2>
arg1 - required argument [default value is 10]
arg2 - optional argument [default value is 20]
help - print this message
?    - print this message

tcl可以实现这个功能吗?

我查了一些被问到的问题,我看到的是这个question https://stackoverflow.com/questions/31110082/how-to-create-tcl-proc-with-hyphen-flag-arguments?rq=1。这部分满足了我的要求,但我找不到任何可以帮助我解决问题的东西。请指导我!


阅读proc http://tcl.tk/man/tcl8.6/TclCmd/proc.htm仔细查看手册页:参数列表必须是单个列表。你当时在想这个:

% proc myproc {{a 42} {b 54}} { puts "a=$a b=$b" }
% myproc
a=42 b=54
% myproc 1
a=1 b=54
% myproc 1 2
a=1 b=2

请注意,第一个参数被分配给a-- 你不能提供一个值b并使用默认值a用这个方法。

要使用类似命令行的选项,最简单的方法是:

% proc myproc {args} {
    array set data [list -a 42 -b 54 {*}$args]
    puts "a=$data(-a) b=$data(-b)"
}
% myproc
a=42 b=54
% myproc -a 1
a=1 b=54
% myproc -b 2
a=42 b=2
% myproc -b 2 -a 3
a=3 b=2
% myproc -c 4
a=42 b=54

此方法的一个问题是您必须传递偶数个参数,或者array set会抛出错误:

% myproc 12
list must have an even number of elements
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写具有默认值和选项的 tcl 程序? 的相关文章

  • 正则表达式在 Expect 缓冲区中查找字符串

    我正在尝试找到一个可匹配转义字符字符串的正则表达式 Expect 响应 请参阅这个问题 和一个六位数字 第一个字符为字母数字 这是我需要识别的整个字符串 r n u001b 1 14HX76196 最终我需要提取字符串 X76196 这是我
  • TCL 在字符串中设置特殊字符

    我想在 TCL 中将以下错误消息设置为变量 并与来自网络交换机的错误消息进行比较 绕过特殊字符 使用 插槽 端口 或 端口名称 或 插槽 或 我尝试用这种方式 set x Use slot port or portname or slot
  • 当从 tcl 调用 rpmbuild 时,为什么 topdir 设置为其默认值?

    我有一个 执行 rpmbuild 的 tcl 脚本 这样做时 rpmbuild 使用的 topdir 是错误的 我的主目录中有一个 rpmmacros 文件 如果我手动调用 rpmbuild 它工作正常 即 topdir 不是默认的 我添加
  • 为什么 Tcler 建议支撑你的“表达”?

    我们可以用两种可能的方式评估两个表达式 set a 1 set b 1 puts expr a b puts expr a b 但为什么讨厌经验丰富的 Tclers 第一个 并认为这是不好的做法呢 第一次使用是否expr有一些安全问题吗 问
  • Strawberry Perl v5.30.0 无法安装 Tcl (Windows 10)

    我从下载并安装了草莓 perl 5 30 0 1 64bit msi草莓perl com http strawberryperl com 在我的 Windows 10 上并尝试使用 cpan 安装 Tcl 模块 但由于缺少 tclsh 而失
  • Tcl 扩展:扩展的 ClientData 的生命周期

    重要的本机扩展将需要每个解释器的数据 动态分配的结构 我目前正在使用Tcl SetAssocData 有一个对应的密钥 扩展名和适当的删除例程 以防止此内存泄漏 然而 Tcl PkgProvideEx 也允许记录这样的 信息 该信息可以通过
  • 在 Mac 10.9.2 上安装 WordNet

    我正在尝试在 Mac 操作系统 10 9 2 上安装 WordNet 我尝试过以下方法 配置 make 但期间make我遇到了一些错误 然后我安装了XQuartz 2 7 5 我仍然遇到一些错误make 接下来 我安装了 Xcode 但这仍
  • 将 bash 数组传递给 Expect 脚本

    我有一个 bash 脚本 它像这样调用 Expect 脚本 SCRIPTS DIRECTORY my expect script sh my bash array 看起来我可以传递一个变量并使用它 对于这个例子 变量似乎是在 lindex
  • 如何使用 Swig 将枚举值从 TCL 脚本传递到 C++ 类

    我正在使用以下代码 1 文件 example i module example Put header files here or function declarations like below include example h incl
  • TCL - 按任意数量的空格将字符串拆分为列表

    假设我有一个像这样的字符串 set str AAA B C DFG 142 56 现在我想得到一个列表 如下所示 AAA B C DFG 142 56 为此 我想使用 split 函数 但在这种情况下我会得到一些额外的空列表 我怎样才能得到
  • TCL/Expect - exec - 如何使用参数执行程序

    我正在尝试使用 TCL 命令exec in tclsh这是我的结果 set show me dir ls ls exec show me dir VboxSharedFolder set show me dir ls la ls la ex
  • 生成和执行之间有什么区别?

    我正在学习编写 TCL 期望 脚本 我注意到一些示例显示了如何使用 spawn 而其他示例则显示了命令 exec 我尝试谷歌搜索 但找不到有什么区别 假设我在一个很长的期望脚本中间调用 exec 我会期望发生什么 spawn is an e
  • TCL 的通用字符串引用

    我正在编写一个实用程序 恰好是在 python 中 它以 TCL 脚本的形式生成输出 给定 python 中的一些任意字符串变量 不是 unicode 我想生成一个 TCL 行 例如 set s something 这将设置 TCL 变量
  • 循环提示输入另一个密码时出现问题

    我需要一些关于 EXPECT 脚本的帮助 我正在尝试在访问大量主机之前自动登录 并在用户错误输入密码时进行处理 我首先获取用户名和密码 然后针对特定主机对其进行验证 如果密码无效 我想循环并再次询问用户名和密码 我正在尝试这个 省略前面几行
  • 如何使用tcl中的puts更改文本颜色

    我想通过使用 tcl 中的 put 命令来更改控制台中显示的文本颜色以简化调试 我看到很多文章是 abt tk 而不是 tcl 仅供参考 我在 Windows 7 上使用 Active tcl 我尝试过其他人提供的以下代码 http www
  • tcl 暂停并等待按键继续

    我正在 tcl 中寻找一种方法来暂停脚本 例如在使用 puts 进行一些输出之后 并等待用户按下按键 然后再继续输出剩余的文本 你只需使用gets从标准输入读取 proc pause message Hit Enter to continu
  • 在 C 程序中使用 tcl 和 tk 存根

    我需要一个简单的 C 程序来创建 tcl 解释器 初始化 tcl 和 tk 然后加载给定的 tcl tk 脚本 我想使用 tcl 和 tk 存根 以确保程序将在具有不同版本的 tcl tk 的计算机上运行 我将使用这个程序而不是运行wish
  • 将 csv 数据写入命名空间内的矩阵时,TCL 抛出无效命令名称

    这是一个奇怪的问题 我似乎无法弄清楚 我正在使用 TCL 8 5 我正在尝试使用以下命令将数据从 CSV 文件读取到矩阵中csv read2matrix命令 然而 每次我这样做时 它都会说我试图写入的矩阵是无效命令 我正在做的事情的片段 p
  • 从 Bash 调用的 Expect 脚本的退出状态代码

    我制作了一个 Bash 脚本 它使用 Expect 脚本来自动进行 ssh 登录 该脚本连接到多个服务器并运行一些命令 bash 脚本会提示输入一次登录凭据 我想合并一个功能 其中如果第一个服务器登录失败 脚本将终止 以避免脚本检查下一个服
  • (Tcl/Expect) 退出后清屏

    我想在退出我的 半 交互式期望脚本后清除屏幕 在本地计算机上 我可以在脚本中做到这一点吗 这是我尝试过的 但失败了 usr bin expect f set env TERM vt100 spawn ssh Y username domai

随机推荐