Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl 是否尝试获取通过文本编辑器传递的变量的值?_Tcl_Tk - Fatal编程技术网

Tcl 是否尝试获取通过文本编辑器传递的变量的值?

Tcl 是否尝试获取通过文本编辑器传递的变量的值?,tcl,tk,Tcl,Tk,这是我在这里讨论的过程的一个小例子。 如何检查$num的内容,因为puts似乎不起作用?Tk小部件引用的变量始终是全局变量(或者在另一个命名空间中,如果使用限定名称),因为小部件可以在过程返回后保持,并且Tcl不会进行闭包。如果这一点被改变,那将是一个巨大的变化,我认为这不太可能,因为这将使调试脚本变得更加困难。(此外,它还需要一种不同的内存管理方式,这种方式编写和更正起来非常糟糕,而且会产生很多连锁反应。) 因为Tk在全局上下文中使用变量名,所以要从过程中访问变量,需要使用限定名或将其引入范围

这是我在这里讨论的过程的一个小例子。
如何检查
$num
的内容,因为puts似乎不起作用?

Tk小部件引用的变量始终是全局变量(或者在另一个命名空间中,如果使用限定名称),因为小部件可以在过程返回后保持,并且Tcl不会进行闭包。如果这一点被改变,那将是一个巨大的变化,我认为这不太可能,因为这将使调试脚本变得更加困难。(此外,它还需要一种不同的内存管理方式,这种方式编写和更正起来非常糟糕,而且会产生很多连锁反应。)

因为Tk在全局上下文中使用变量名,所以要从过程中访问变量,需要使用限定名或将其引入范围。例如:

proc editor {} {
    label .l_LNum -text "Calibration Date"
    entry .e_Num -width 20 -relief sunken -textvariable num

    grid config .l_LNum -column 0 -row 0 -sticky e
    grid config .e_Num -column 1 -row 0 -sticky "snew"
}

如果您的过程要在过程中多次引用变量,使用
global
而不是限定的形式通常会更快,但差异很小,我们的官方建议是“编写最清晰的内容”。

num
将在全局范围内,因此,请尝试将$::num放入有效的
,谢谢!!你能解释一下吗?我仍然可以基于该值执行操作吗?教程中有一节关于范围:--另外,Tk
选项
手册页中记录了
-textvariable
:是的,您可以随意使用该变量。
proc get_the_number {} {
    return $::num
}
proc get_the_number {} {
    global num
    return $num
}