Я хочу вернуться из configbody, но не могу сделать это явно без заставляя переменную не быть установленной.
Я хотел бы помочь понять поведение, которое я вижу. Обратите внимание на следующий код (с использованием Itcl 3.4):
package require Itcl
catch {itcl::delete class Model}
itcl::class Model {
public variable filename "orig"
}
itcl::configbody Model::filename {
if 1 {
return ""
} else {
}
}
Model my_model
my_model configure -filename "newbie"
puts "I expect the result to be 'newbie:' [my_model cget -filename]"
Когда я возвращаю пустую строку, для имени файла не устанавливается новое значение. Если я не вернусь, а просто позволю процессу провалиться, имя файла изменится. Вы можете увидеть это, изменив 1 на 0 в приведенном выше коде.
Я подозреваю, что это связано со следующим утверждением:
Когда в сценарии нет возврата, его значением является значение последней команды, вычисленной в сценарии.
Если бы кто-нибудь объяснил это поведение и то, как я должен вернуться, я был бы признателен за помощь.