использование глобального ключевого слова в TCL - PullRequest
3 голосов
/ 23 августа 2011

У меня вопрос по поводу global в TCL. В одном файле tcl tclone.tcl у меня есть глобальная переменная: global SIGNAL

в другом файле tcl с именем tcltwo.tcl, я установил переменную SIGNAL как: set SIGNAL 10

В tclone.tcl я улучшил tcltwo.tcl следующим образом: package require tcltwo.tcl будет ли переменная SIGNAL в tclone.tcl иметь значение 10 при запуске? а что за использование gloable переменной?

1 Ответ

3 голосов
/ 23 августа 2011

Как указано в на странице руководства , команда global имеет значение только внутри тел процедур:

Эта команда не действует, если она не выполняется в контексте процедуры.тело.

Так что весь вопрос неясен.Если вы имели в виду, что в первом файле у вас есть proc, устанавливающий глобальную переменную, а другой proc (во втором файле) читает его, тогда вопрос имеет смысл, и ответ - да, код из второго файла увидит внесенные изменения.по коду из первого файла при условии, что процедура «установки» запускается до «получения».Чтобы сделать это более понятным, глобальная переменная является глобальной по отношению к интерпретатору, к которому работает код этой переменной.Следовательно, независимо от того, каким способом вы будете извлекать код в интерпретатор (package require против source против eval и т. Д.), Весь этот код будет видеть один и тот же набор глобалов.

Но в любомВ этом случае вам, вероятно, следует воздерживаться от использования глобальных переменных и использования переменных пространства имен: они также являются глобальными, но вы значительно уменьшите риск введения некоторого другого кода, который впоследствии будет случайно связан с той глобальной переменной, к которой он не должен прикасаться.Конечно, как обычно, это зависит от того, насколько сложным будет ваше приложение.

...