【发布时间】:2019-07-23 23:34:51
【问题描述】:
我定义了两个脚本:第一个脚本在第二个脚本中调用一个 proc。第二个脚本定义了一个命名空间fooSpace,在fooSpace 中定义了一个变量fooValue,并在fooSpace 中定义了一个proc myProc。
在我的第一个脚本中,我想用 myValue 的参数调用我的 proc。我希望我的 proc 测试myValue 是否存在于fooSpace 中作为fooValue。如果是这样,该函数将使用fooValue 来做一些事情。
如果我理解正确,upvar 引用了调用者的命名空间,在我的例子中,它与函数的命名空间不同。但我也不认为我可以在我的 proc 中执行 variable $myvalue ,对吗?如何让我的 proc 使用fooSpace 中定义的变量?
我下面的代码返回“无法读取 $fooSpace”
这是我的第一个脚本(位于 alpha.tcl)的样子:
source bravo.tcl
namespace import fooSpace::myProc
# call the fuction
myProc apples
这是我的第二个脚本(位于 bravo.tcl)的样子:
namespace eval fooSpace {
namespace export myProc
set apples "Apples are 3 for a dollar"
proc myProc {myValue} {
upvar $fooSpace::$myValue fruit
if {[info exists fruit] == 1} {
puts "$fruit"
} else {
puts "we don't have any $fruit today"
}
}
}
【问题讨论】:
-
请。尝试改进你的问题措辞和例子。 (a) 示例不是最少的(例如,不需要
source来证明感知到的问题); (b) 它们不起作用(myfunction与myProc),(c) 您没有报告向您报告的错误消息的正确措辞:Can't read $fooSpace不是 Tcl 错误消息。
标签: scope namespaces tcl