TCL получает имя proc, в котором я
Как узнать, что такое имя proc, в котором я есть. Я имею в виду, мне нужно это:
proc nameOfTheProc {} {
#a lot of code here
puts "ERROR: You are using 'nameOfTheProc' proc wrongly"
}
поэтому я хочу получить "nameOfTheProc", но не жесткий код. Чтобы кто-то изменил имя proc, он все равно будет работать правильно.
Ответы
Ответ 1
Вы можете использовать команду info level
для вашей проблемы:
proc nameOfTheProc {} {
#a lot of code here
puts "ERROR: You are using '[lindex [info level 0] 0]' proc wrongly"
puts "INFO: You specified the arguments: '[lrange [info level [info level]] 1 end]'"
}
С внутренним info level
вы получите уровень глубины вызова процедуры, в которой вы находитесь. Внешний будет возвращать имя самой процедуры.
Ответ 2
Правильный идиоматический способ достижения того, что подразумевается в вашем вопросе, заключается в использовании return -code error $message
следующим образом:
proc nameOfTheProc {} {
#a lot of code here
return -code error "Wrong sequence of blorbs passed"
}
Таким образом, ваша процедура будет вести себя точно так, как это делают команды Tcl, если они не удовлетворены тем, с чем они были вызваны: это вызовет ошибку на сайте вызова.
Ответ 3
Если ваш запуск Tcl 8.5 или более поздней версии, команда info frame
вернет dict, а не список. Поэтому измените код следующим образом:
proc nameOfTheProc {} {
puts "This is [dict get [info frame [info frame]] proc]"
}