如何编写具有默认值和选项的 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 程序? 的相关文章

  • 卸载活动 TCL Mac

    我正在尝试在 Mac 上卸载 Active TCL 但网站提供的代码不起作用 我收到错误消息 指出不是目录 当我查看代码提供的文件路径时 我可以手动查找 但它不起作用 还有其他方法可以摆脱这个吗 以下是提供的代码 cd Library Fr
  • TCL subst 或 eval 命令在我的情况下不起作用..

    subst or eval command is not working in my case proc sum a b return expr a b set a 1 1 set b 2 2 sum a b 3 sum a b can t
  • 为什么 TCL 脚本中的数组大小没有通过数组大小 正确给出

    这里我有一个包含 4 个元素的数组 但它打印的值为 11 那么大小如何变成 11 而不是 4 array set ipname UART TEST SPI I2C set bsize array size ipname puts bsize
  • 如何在 tcl 中使用 split 删除不需要的字符

    这是一个例子 Interface IP Address OK Method Status Protocol FastEthernet0 0 unassigned YES unset administratively down down Fa
  • 标准输出重定向

    我正在使用 tcl 中的一个程序 我无法控制该程序 它在输出窗口上输出很多详细信息 例如 Response
  • 对于 Perl GUI,我应该使用 Perl/Tk、Tcl::Tk 还是 Tkx?

    我很喜欢Perl Tk 但我认为这是 DOA 我认为Tcl Tk and Tkx是更好的解决方案 假设我掉落Perl Tk 是 最受支持 的路线Tcl Tk 自 2007 年以来就没有更新过 而且似乎无法联系到其作者 或者Tkx 其中任何一
  • 将列表传递给 Tcl 过程

    将列表传递给 Tcl 过程的规范方法是什么 如果我能得到它 以便列表自动扩展为可变数量的参数 我真的很喜欢它 所以像这样 set a b c myprocedure option1 option2 a and myprocedure opt
  • 黑莓开发上的脚本语言?

    据我所知 开发 Blackberry 应用程序的首选方法是 Java 这是吗only way 我梦想有一个快速的应用程序环境 您可以在其中创建 GUI 使用 Blackberry UI 组件 类似于 Blackberry 上的 Tcl Tk
  • 如何捕捉Tk中的最大化信号?

    您可以通过以下方式将命令与窗口的 X 按钮绑定 wm protocol windowPath WM DELETE WINDOW command 如何对窗口的最大化按钮执行相同的操作 X11 中也没有标准协议ICCCM套 http tronc
  • 按值对 Tcl 字典排序

    我想知道 Tcl 中是否有一种按值对 dict 进行排序的优雅方法 假设我有以下字典 set d1 dict create k1 10 k2 89 k3 1 k4 15 k5 20 Results in dict of form k1 gt
  • 8.4 中的 tcl 8.6 封装

    在 Tcl Tk 8 6 中有一个称为笔记本的 Ttk 功能 我想将其实现到我的程序中 但是 我需要该包才能利用此功能 我必须使用 8 4 因为我们使用的 dll 之一仅与 8 4 版本兼容 我感到沮丧的根源 我已经下载了 Tcl 8 6
  • 在 Tkinter 中处理触摸屏手势

    我将如何在 Tkinter 中安装触摸屏手势处理程序 我需要一些特别简单的事情 每当检测到 展开 手势时就增加字体大小 如果 Tcl Tk 没有具体实现的话 这是否可以在 Tkinter 中实现 我想要么窗口管理器向客户端窗口发送一些我可以
  • 调试 tcl 流程 - 就像 bash -

    我只是想知道是否有类似的东西set x因为它存在于 Bash forTCL 中 它允许我跟踪脚本流程 然后帮助我调试它 Simple trace add execution source enterstep apply cmd op put
  • Tcl 脚本中错误的静态检测

    我已经开发了一些代码 并且在 Linux 机器上遇到了 Tcl 解释器错误标记的问题 usr bin tclsh if 1 puts abc1 elseif puts abc2 上面的代码没有标记错误 elseif 条件 直到进入elsei
  • 从 Bash 调用的 Expect 脚本的退出状态代码

    我制作了一个 Bash 脚本 它使用 Expect 脚本来自动进行 ssh 登录 该脚本连接到多个服务器并运行一些命令 bash 脚本会提示输入一次登录凭据 我想合并一个功能 其中如果第一个服务器登录失败 脚本将终止 以避免脚本检查下一个服
  • 如何检查 TCL 的标准输入缓冲区是否为空?

    With fconfigure http www tcl tk man tcl8 6 TclCmd fconfigure htm您可以获取和设置频道选项 buffering指定缓冲类型 默认为line for stdin 有没有办法检查缓冲
  • TCL 中的 if 语句

    我对以下代码的 tcl 中的 if 语句有疑问 if number 1 name hello number 0 name yes do something here 上面的代码是有效的 但是如果我这样写 if number 1 name h
  • 如何使用 Tkinter 创建等宽网格列?

    如何强制 Tkinter 应用程序窗口中的列宽度相等 tkdocs网站声明如下 每列的宽度 或每行的高度 取决于列或行中包含的小部件的宽度或高度 这意味着当绘制用户界面并将其划分为行和列时 您无需担心每列或行的宽度相等 或高度 大概 TkD
  • 如何使用 regexp 来匹配 TCL 中的括号

    我有一个关于在 TCL 中使用正则表达式匹配括号的问题 例如我有一个像这样的字符串 yes it is true and it is fine 我只想匹配这部分yes it is true 如何搭配呢 您可以将括号括在字符类中 如 boba
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50

随机推荐