如何访问一个进程的变量外

时间:2019-01-30 18:44:41

标签: variables scope global-variables tcl

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

我试图避免设置一堆全局变量,而只访问我在特定名称空间中定义的变量。我需要在下面的代码中添加些什么,以便proc可以访问变量[All,capital,related,expenditures,are,frozen,effectively,for,Q4] ,而该变量显然不在proc的范围内?

a

1 个答案:

答案 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;