Как мне получить доступ к переменной вне процедуры - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь обернуть голову вокруг областей видимости переменных Tcl, но я застрял на том, что, как мне показалось, было бы простой концепцией: как я могу получить доступ к переменной, которую я определил вне моего процесса, но которую яне передавать явно в proc?

Я стараюсь избегать установки набора глобальных переменных и использовать только те переменные, которые я определяю в определенном пространстве имен.Что мне нужно добавить в мой код ниже, чтобы proc мог получить доступ к переменной a, которая явно не входит в сферу действия proc *

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

1 Ответ

0 голосов
/ 30 января 2019

Вы можете использовать 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]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...