Вы можете использовать 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]
}