Один из самых простых приемов - добавить немного магии в скрипт pkgIndex.tcl
для пакета.Обычно это выглядит примерно так (cookiejar
- это небольшой пакет, который я написал в 8.7):
package ifneeded cookiejar 0.1 [list source [file join $dir cookiejar.tcl]]
Но если вы хотите сделать условия более условными, вы можете вместо этого сделать:
if {[info exist ::developermode]} { # Or however you want to detect it!
package ifneeded cookiejar 0.1 [list source [file join $dir cookiejar-dev.tcl]]
} else {
package ifneeded cookiejar 0.1 [list source [file join $dir cookiejar-release.tcl]]
}
После этого вы можете иметь две реализации: одну для разработки и другую для выпуска;в вашем случае версия выпуска, вероятно, должна представлять собой просто пустое место в функциях, которые предоставляют тот же API, но ничего не делают.(Вы не можете предоставить какие-либо команды или сделать что-либо непоследовательным, но это может привести к сбою кода, работающего в процессе разработки, в prod.)
Если это поможет, учтите, что если вы определяетепроцедура, подобная этой:
proc someCommand {args} {}
(то есть, просто принимает args
в качестве формального аргумента и имеет пустое тело.) тогда Tcl сделает эту процедуру полностью удаленной из байт-кода времени выполнения ваших процедур.которые используют это.Это, вероятно, будет очень полезно для вас;он позволяет вашему производственному коду ссылаться на ваших помощников по отладке, но при этом не требует (значительных) затрат на это.