如何访问过程之外的变量

2023-12-08

我正在尝试围绕 Tcl 变量作用域进行思考,但我坚持认为是一个简单的概念:如何访问我在过程之外定义的变量,但我没有明确地定义该变量传递给进程?

我试图避免设置一堆全局变量,并且只访问我在特定命名空间中定义的变量。我需要在下面的代码中添加什么以便 proc 可以访问变量a,这显然不在proc的范围内?

set a apples
proc myList {b c} {
   puts [concat $a $b $c]
}

您可以使用upvar:

set a apples
proc myList {b c} {
    upvar a a
    puts [concat $a $b $c]
}

或者,稍微扩展一下示例以显示“源”变量不必存在于全局范围内:

proc p1 {} { set a 10; p2 }
proc p2 {} { upvar 1 a b; puts "in p2, value is $b" }
p1

outputs

in p2, value is 10

If a被定义在命名空间中,你可以使用variable:

namespace eval foo {
    set a apples
    # OR
    # variable a apples
}

proc foo::myList {b c} {
    variable a
    puts [concat $a $b $c]
}

Or if a是在全局范围内创建的,您仍然可以访问它而无需global函数,使用::(我会参考这个问题对于这个):

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

如何访问过程之外的变量 的相关文章

随机推荐

  • 如何在 pyplot 中的分组条形图中标记组?

    我想在 pyplot 中做类似以下的事情 我也可以在其中标记条形图和组 我能够标记条形 但不知道如何标记组 谢谢 默认的Seaborn 条形图会创造一个传说来显示岁月 import numpy as np import pandas as
  • C# - httpWebRequest 流的大小是否有限制?

    我正在尝试构建一个应用程序 使用 httpwebrequests 从自定义网络服务器下载一个小二进制文件 20 25 KB 这是服务器端代码 Stream UpdateRequest context Request InputStream
  • 从 HEVC 参考软件获取一些信息

    我是 HEVC 新手 现在正在了解参考软件 现在正在研究帧内预测 编码后我需要获取如下信息 给定 CTU 的 CU 结构 对于计算期间的每个 CU 它是信息 例如 QP 值 选择的亮度模式 选择的色度模式 CU 是否处于 CTU 分割决策的
  • 如何从我不拥有的画布中获取像素数据?

    我正在尝试从画布获取像素 RGBA 数据以进行进一步处理 我认为画布实际上是一个 Unity 游戏 如果这有什么不同的话 我正在尝试用游戏的画布来做到这一点颤抖和坐立不安 我用读取像素方法从context 这是我尝试过的 var examp
  • 我可以像在asp.net core mvc中一样使用service在blazor中操作dbcontext吗?

    在我的asp net core mvc项目中 我通常会使用这个服务来进行业务操作 services AddDbContextPool
  • 循环 switch 语句

    我是 C 新手 我在控制台应用程序中有一个 菜单 现在 当我完成从菜单中选择一个项目并执行该菜单项所需的操作时 我想循环并再次显示菜单 以便用户可以选择不同的菜单项 我的菜单上有一个退出选项 我只想用它来退出 我尝试过 while 循环 但
  • Netbeans插件解析api

    如何安装netbeans插件解析API 以下是我尝试在 Netbeans 中安装 按需扫描 插件时出现的错误 Some plugins require plugin Parsing API to be installed The plugi
  • bash 包装器将 stderr 设为红色

    Bash 支持颜色 即 033 31m切换到红色并且 033 0m切换回无色 我想制作一个小型的 bash 包装器 它可以可靠地将 stderr 输出为红色 即它应该将 033 31m之前和 033 0m在来自 stderr 的所有内容之后
  • 带有子解析器和可选位置参数的 Python argparse

    我想要一个带有子解析器的程序 它可以处理特定的参数 同时还为之前的解析器保留一些位置和可选参数 事实上 我真正想要的只是一个选项 我的意思是 一个有效的子解析器或一个有效的本地参数 我希望拥有的东西的例子 Program sectionNa
  • wmic 命令的批处理脚本中的文本乱码

    我正在尝试运行批处理脚本来获取基本的计算机信息 如 CPU RAM 和活动网卡 这是我的代码 Echo OFF set newline echo echo Manufacturer Information gt test1 txt syst
  • 如何使用 cPanel 托管 Django 网站?

    我是网站托管领域的新手 尤其是 cPanel 平台 我有一个使用Python语言开发的网站 它也使用Django 我在 cPanel 中托管了这个网站 但它似乎不起作用 当我浏览我的网站域 www def com 时 现在它显示 site
  • 如何在Java中实现无穷大?

    Java 是否有任何东西可以代表每种数值数据类型的无穷大 它是如何实现的 以便我可以用它进行数学运算 E g int myInf infinity However it is done myInf 5 returns infinity my
  • PHP 表单提交时自动跳转到 HTML 锚点

    我正在尝试将表单添加到我的索引页面中 以便当您单击 提交 时 页面重新加载时它将自动返回到表单 现在 如果页面上有任何错误 它会在表单上方显示它们 并给出一些感谢信息 我目前的index html 页面有以下内容
  • BizTalk Schema 开发 - 十六进制值 0x19,是无效字符

    我有一个架构元素节点 如下所示
  • 如何使用 PLSQLDeveloper 窗口打印 SYS_REFCURSOR?

    在下面的查询中如何在 PL SQL SQL Window 中获取 IO CURSOR 值 DECLARE SOME VAR 1 VARCHAR2 20 SOME VAR 2 VARCHAR2 20 SOME VAR 3 DECIMAL IO
  • 在函数式编程中,什么是函子?

    我在阅读有关函数式编程的各种文章时多次遇到 函子 一词 但作者通常假设读者已经理解该术语 在网络上环顾四周 要么提供了过多的技术描述 请参阅维基百科文章 或令人难以置信的模糊描述 请参阅此处有关函子的部分ocaml 教程网站 有人可以定义这
  • 如何从sql bigquery中的字符串字典列表中获取值?

    您好 我有一个包含以下数据的 sql 表 Outbound click action type outbound click value 1025 我如何获得正确的值 因为这是 bigquery sql 中的字符串 我想要的输出是 Outb
  • 如何在 Google Container Engine 上使用 Kubernetes 服务公开动态端口?

    我正在尝试通过 TCP 协议通过互联网从本地计算机连接到 Google Container Engine GKE 上的 Docker 容器 到目前为止 我已经使用了 Kubernetes 服务 它提供了外部 IP 地址 因此本地计算机可以使
  • C#:文件复制通知[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 您好 我正在创建一个 C 应用程序来监视已复制的文件 该程序的目的是提醒用户有一个文件已被复制 我知道文件系统观察程序类 但它只有 4 个事件 更改或创建或删除或重命名 有没有办法知道
  • 如何访问过程之外的变量

    我正在尝试围绕 Tcl 变量作用域进行思考 但我坚持认为是一个简单的概念 如何访问我在过程之外定义的变量 但我没有明确地定义该变量传递给进程 我试图避免设置一堆全局变量 并且只访问我在特定命名空间中定义的变量 我需要在下面的代码中添加什么以