我正在尝试围绕Tcl变量作用域,但是我一直坚持我认为这是一个简单的概念:如何访问在proc之外定义的变量,但是我没有明确传递给proc?
我试图避免设置一堆全局变量,而只访问我在特定名称空间中定义的变量。我需要在下面的代码中添加些什么,以便proc可以访问变量[All,capital,related,expenditures,are,frozen,effectively,for,Q4]
,而该变量显然不在proc的范围内?
a
答案 0 :(得分:3)
您可以使用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
输出
in p2, value is 10
如果在命名空间中定义了a
,则可以使用variable
:
namespace eval foo {
set a apples
# OR
# variable a apples
}
proc foo::myList {b c} {
variable a
puts [concat $a $b $c]
}
或者如果a
是在全局范围内创建的,您仍然可以使用global
来使用::
来访问它而无需使用proc myList {b c} {
puts [concat $::a $b $c]
}
函数(我将参考this SO question ):
import ApplePicker from "./my_path/applePicker.js";
import NiceFarmer from "./my_path/niceFarmer.js";
const orchard = function () {
const appleNumber = 10;
const jack = new ApplePicker();
const daniel = new NiceFarmer();
jack.eatAnApple();
daniel.eatAnApple();
// appleNumber have to be now === 2
}
// Example of applePicker.js structure
const ApplePicker = function () {
this.eatAnApple = function () {
// Do something
}
}
export default ApplePicker;