带可选参数的 TCL 过程调用

2024-04-14

存在一个 TCL 脚本,该脚本具有多个名称相似的过程定义func在不同的命名空间中。程序如下:

proc func {a} {
    puts $a
}

所有这类程序都只有一个参数a。所有此类过程都是从整个脚本中的一行调用的:

func $a

我需要创建另一个具有相似名称的过程定义func在其他命名空间中。但该过程将有两个参数。该过程还需要从同名的其他过程的同一行调用。程序如下所示:

proc func {a b} {
    puts $a
    puts $b
}

我现在需要修改调用所有这些过程的行func $a因此,它可以调用具有一个参数的所有过程和具有两个参数的新过程。但不得更改带有一个参数的过程定义。哪一行调用所有这些过程func $a应该是什么样子?


如果您想要一个可选参数,并且您知道如果未提供可选值应该是什么,则可以执行以下操作:

proc func {a {b "the default"}} {
    puts "a is $a"
    puts "b is $b"
}

如果您需要在运行时计算默认值,最简单的技术是在实际输入中不太可能出现的神奇哨兵值。比如两个 ASCII NUL 字符(== Unicode U+000000):

proc func {a {b "\u0000\u0000"}} {
    if {$b eq "\u0000\u0000"} {
        set b "default:$a"
    }
    puts "a is $a"
    puts "b is $b"
}

否则,你可以使用魔法argsvalue 来获取完整的参数列表并“手动”完成所有工作:

proc func {a args} {
    if {[llength $args] == 0} {
        set b "the default..."
    } elseif {[llength $args] == 1} {
        set b [lindex $args 0]
    } else {
        error "bad number of arguments!"
    }
    puts "a is $a"
    puts "b is $b"
}

如果你这样做的话,info level内省者可以提供帮助,但事情可能会变得复杂......

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

带可选参数的 TCL 过程调用 的相关文章

  • 当从 tcl 调用 rpmbuild 时,为什么 topdir 设置为其默认值?

    我有一个 执行 rpmbuild 的 tcl 脚本 这样做时 rpmbuild 使用的 topdir 是错误的 我的主目录中有一个 rpmmacros 文件 如果我手动调用 rpmbuild 它工作正常 即 topdir 不是默认的 我添加
  • 快速字符串替换

    在构建了一个可能非常大的字符串后 我将对其进行大量更改 将其中的单个字符 或字节 如果需要 更改为另一个字符 实际上 我的脚本正在构建一个填字游戏 因此字符串不会很长 但我的问题很笼统 我如何利用我不改变字符串 或任何更好的数据类型 长度的
  • 如何将 put 的输出作为输入提供给过程?

    我有一个将列表打印为格式化表格的过程 它有像 print table temp 这样的用例 我如何给出不同过程的输出 其中我使用 puts 命令打印输出作为该过程 print table 的输入 set list1 abc 1 defg 2
  • 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 的通用字符串引用

    我正在编写一个实用程序 恰好是在 python 中 它以 TCL 脚本的形式生成输出 给定 python 中的一些任意字符串变量 不是 unicode 我想生成一个 TCL 行 例如 set s something 这将设置 TCL 变量
  • 使用 tkinter 时如何将 tcl 中的 stdout 获取到 python 字符串变量中?

    我有以下 python 代码 import Tkinter root Tkinter Tk root tk eval puts printed by tcl 它会在屏幕上打印 printed by tcl 如何将 tcl 解释器打印到屏幕上
  • 解析 tcl 中的文本文件并创建键值对字典,其中值采用列表格式

    如何分离以下文本文件并仅保留相应的所需数据 例如文本文件的格式 Name Roll number Subject Experiment name Marks Result Joy 23 Science Exp related to magn
  • 如何用C++扩展TCL?

    我可以编写可编译并用于扩展 TCL 的 C 代码 我不是指调用可执行文件 吗 我可以描述一些类 函数并通过调用已编译的 so 或 a 文件 C 代码在我的 TCl 代码中使用它们吗 如果是 请示意性地向我解释一下它是如何完成的 http c
  • 标准输出重定向

    我正在使用 tcl 中的一个程序 我无法控制该程序 它在输出窗口上输出很多详细信息 例如 Response
  • tkinter - wm 协议不处理 WM_HELP 消息

    tkinter 只处理已知协议吗 如果是这样 那对我来说似乎没什么用 如果不是 我不确定为什么这段代码在微软下对我有用 import tkinter as tk def lol print hi root tk Tk menu tk Men
  • 在单独线程中创建的 Tcl Interp 会共享任何全局数据吗?

    在我的 C 代码中 如果我为每个线程创建一个 tcl interp 并将其用于 Tcl EvalEx 脚本 并通过 Tcl GetStringResult 获取结果 那么该线程安全吗 除了 const 数据之外 这些线程之间没有共享数据 经
  • 8.4 中的 tcl 8.6 封装

    在 Tcl Tk 8 6 中有一个称为笔记本的 Ttk 功能 我想将其实现到我的程序中 但是 我需要该包才能利用此功能 我必须使用 8 4 因为我们使用的 dll 之一仅与 8 4 版本兼容 我感到沮丧的根源 我已经下载了 Tcl 8 6
  • tcl 暂停并等待按键继续

    我正在 tcl 中寻找一种方法来暂停脚本 例如在使用 puts 进行一些输出之后 并等待用户按下按键 然后再继续输出剩余的文本 你只需使用gets从标准输入读取 proc pause message Hit Enter to continu
  • 执行 tail -F 直到匹配模式

    我想做一个tail F在文件上直到匹配模式 我找到了一种使用方法awk 但恕我直言 我的命令并不是很干净 问题是我need由于某些限制 只能用一行来完成 tail n 0 F tmp foo awk W interactive if 1 E
  • 如何让proc更有效?

    有一个顶点集合 x1 y1 x2 y2 xn yn 我想改变这些坐标的中心 所以我尝试 proc changeCenter vertices X Y set myList list foreach element vertices lapp
  • 将 csv 数据写入命名空间内的矩阵时,TCL 抛出无效命令名称

    这是一个奇怪的问题 我似乎无法弄清楚 我正在使用 TCL 8 5 我正在尝试使用以下命令将数据从 CSV 文件读取到矩阵中csv read2matrix命令 然而 每次我这样做时 它都会说我试图写入的矩阵是无效命令 我正在做的事情的片段 p
  • 如何检查 TCL 的标准输入缓冲区是否为空?

    With fconfigure http www tcl tk man tcl8 6 TclCmd fconfigure htm您可以获取和设置频道选项 buffering指定缓冲类型 默认为line for stdin 有没有办法检查缓冲
  • (Tcl/Expect) 退出后清屏

    我想在退出我的 半 交互式期望脚本后清除屏幕 在本地计算机上 我可以在脚本中做到这一点吗 这是我尝试过的 但失败了 usr bin expect f set env TERM vt100 spawn ssh Y username domai
  • 如何在 TCL/EXPECT 中使用 $expect_out 分配变量?

    如果我想匹配DEF 23使用以下正则表达式 expect re DEF 0 9 set result expect out 1 string 为什么它说no such element in array 如何 expect out工作 以及我
  • 如何使用 regexp 来匹配 TCL 中的括号

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

随机推荐

  • 为什么“Inline-block”在这个 CSS 中不能正常工作?

    请检查下面的 CSS rex is the container of ex ex2 ex3 div rex height 200px border 0px margin 60px auto padding 0 vertical align
  • CloudKit - NSPredicate 用于查找引用列表中包含指定 CKReference 的所有记录

    我正在开发一个 CloudKit 支持的应用程序 其用户记录类型具有 以下 参考列表属性 我正在尝试构建一个查询来获取关注指定用户的每个用户 即指定用户在以下参考列表中显示为条目的那些用户 我目前正在尝试构建我的NSPredicate为了C
  • HTTP_REFERER 空白,需要替代

    我有一个简单的注册表单 需要跟踪来自一个特定外部引用者的点击次数 这是 PHP 的一个简单任务 SERVER HTTP REFERER 然而 它是空白的 经过一些研究后 我尝试使用一些 javascript document referre
  • 使用 matplotlib 在对数图中设置轴限制

    如何在使用 matplotlib 绘制的点周围创建空间 For example in this plot the bottom left point is cutoff by the axis but I would like a litt
  • 如何判断 HTML5 音频元素何时播放完毕?

    如何判断 HTML5 音频元素何时播放完毕 它会引发我可以收听的事件或类似的事件吗 我需要在音轨结束时做出反应 Thanks 使用 HTML
  • 我可以在不使用本地工作副本的情况下将新文件夹添加到 TFS 存储库服务器端吗?

    我目前正在将一些源代码从 Subversion SVN 存储库传输到我客户的 Team Foundation Server 我偶然发现的一件事是 如果不首先将该存储库中的所有文件拉到本地工作区中的本地工作文件夹 则似乎无法编辑存储库 我正在
  • 如何在 Github Actions 中设置机密?

    官方样板代码注入npm token如下 NODE AUTH TOKEN secrets npm token 如何访问和设置该变量 我在 GUI 中找不到它 转到您在 Github 中的项目 选择Settings tab 点击Secrets左
  • 通过 Laravel 中的链接 href 传递 id

    是否可以通过 Laravel 中的链接 href 传递 id 并显示该页面 例如 projects display 2 我有这个链接 td a href class btn btn info View a td 当鼠标悬停在链接上时 它将
  • 如何使 extjs 手风琴垂直滚动

    在这里摆弄 https fiddle sencha com fiddle 5gv 如果手风琴中有很多面板 它们就会在垂直方向上相互碰撞 并且无法扩展 我想让手风琴的总高度等于标题的高度加上一个面板主体的高度 展开 然后父面板应该只有一个滚动
  • 自 2012 年底起实施@font-face

    我花了几个晚上研究在当今的现代浏览器中实现 font face 的最佳方法 我是一名全职网络 系统开发人员 具有图形设计师的背景 我发现网页设计的机会和可能性变得越来越有趣 因此 我做了一些测试 想听听是否有人对此有建议 更好的想法或意见
  • 禁用所有操作的浏览器缓存,但保留捆绑包的浏览器缓存

    在我正在开发的 MVC 应用程序中 出于安全原因 我们必须阻止所有操作的浏览器缓存 防止用户在注销后返回历史记录 我们使用以下方法实现了这一点这个解决方案 https stackoverflow com a 5664481 2123652
  • 使用 SQL 将多个字段连接成一个

    我有三张桌子tag page pagetag 有了下面的数据 page ID NAME 1 page 1 2 page 2 3 page 3 4 page 4 tag ID NAME 1 tag 1 2 tag 2 3 tag 3 4 ta
  • 如何在 Quarkus 中处理大文件上传

    我的问题有两个 我正在寻找一种在 quarkus 应用程序服务器上实现分段文件上传的方法 该服务器允许程序员访问上传的文件 浏览文档似乎有https quarkus io guides rest client multipart https
  • 使用 VSCode“切换行注释”命令时更改注释符号位置

    是否可以在 VSCode 中自定义注释符号 使用 Python 时为 的位置 例如 如果我的代码是 def my func value 1 我在第 2 行按 CMD 我得到 def my func value 1 我更愿意得到 def my
  • 如何构建此 SQL 查询。合并多个表? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 注意 这不
  • C# Entity Framework 4.1 Lambda Include - 仅选择特定包含的值

    我正在 EF4 1 上执行 lambda select 包括当前语句中的另一个相关 DBSet return dbEntity GameTypes Include a gt a Draws Where d gt d IsActive tru
  • 使用意图从 Unity 应用程序向 Android 应用程序发送数据

    我有两个独立的应用程序 AppA 使用 Android Studio 开发 和 AppB 使用 Unity 开发 AppA 将启动 AppB 这是一个游戏应用程序 用户玩完游戏 AppB 并点击退出按钮后 会将游戏记录 字符串数组 发送回A
  • C/C++ 计算小数位数?

    假设用户输入的是十进制数 例如 5 2155 有 4 位小数 它可以自由存储 int double 等 有没有clever 或非常简单 找出数字有多少位小数的方法 有点像如何通过屏蔽最后一位来发现数字是偶数还是奇数的问题 我知道的两种方法
  • 从构造函数调用的shared_from_this

    我必须在创建对象时在容器中注册该对象 如果没有智能指针 我会使用这样的东西 a class a class register somewhere this 对于智能指针我应该使用shared from this但我不能在构造函数中使用它 有
  • 带可选参数的 TCL 过程调用

    存在一个 TCL 脚本 该脚本具有多个名称相似的过程定义func在不同的命名空间中 程序如下 proc func a puts a 所有这类程序都只有一个参数a 所有此类过程都是从整个脚本中的一行调用的 func a 我需要创建另一个具有相