Ошибка: невозможно переименовать в "tmp_read_command": команда уже существует - PullRequest
0 голосов
/ 18 марта 2020

Считайте, что вы переименовываете команду, а затем снова пытаетесь переименовать ее, и вы увидите это сообщение об ошибке.

Error: can't rename to "tmp_read_command": command already exists

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

Подробности:

Два файла:

include.tcl

proc snps_read_command { args } {
  echo "Hi, I am there"
  eval tmp_read_command
}
proc procedure_a { args } {
  rename -force read_command tmp_read_command
  rename -force snps_read_comamnd read_command
}

test.tcl

source ./include.tcl
procedure_a
source ./include.tcl
procedure_a

read_command
read_command

При выполнении вышеуказанного сценария TCL выдается следующее сообщение об ошибке:

Error: can't rename to "tmp_command": command already exists

Это происходит потому что я вызываю method_a дважды. Первый раз, он переименовывает, а второй раз, когда он пытается переименовать, он сует. Я понимаю.

Вопрос:

Что я должен написать, чтобы не делать это переименование во второй раз? Я попробовал информационные команды tmp_read_command, и это не сработало.

1 Ответ

0 голосов
/ 18 марта 2020

есть ли условие проверки, которое мы можем поставить, чтобы выяснить, существует команда или нет

Один из самых простых способов проверить это посмотреть на длину списка, возвращаемого info commands с подходящим рисунком . Что звучит сложнее, чем для обычных команд:

if {[llength [info commands tmp_read_command]]} {
    puts "The command tmp_read_command already exists"
}

Для команд, которые не включают метасимволы глобуса в своих именах (подавляющее большинство команд!), Это становится очень эффективной проверкой на уровне байт-кода .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...