обойти выход в коде в Tcl

предположим, что у меня есть proc foo. Код процедуры:

proc foo { argy } {
   if { $argy == 1 } { exit 1 }
}

Я хочу вызвать foo, но вызывающий код должен обходить/игнорировать команду выхода, а не выходить из TCL. То есть: этот код:

foo 1
puts "bar"

Должен дать:

>bar

Есть идеи?
Спасибо.


person user1134991    schedule 18.11.2015    source источник
comment
Если ответ Динеша решит вашу проблему, рассмотрите возможность принятия ответа, чтобы показать другим читателям, что он был полезен.   -  person Peter Lewerin    schedule 22.11.2015


Ответы (1)


Используйте rename, чтобы переопределить поведение по умолчанию.

rename exit _exit
proc exit {{status ""}} {}

Сохраните приведенный выше код до первого появления команды выхода в вашем коде. то есть даже в начале вашего кода, так что exit будет заменен этой фиктивной процедурой exit.

person Dinesh    schedule 18.11.2015
comment
Может быть, заставить фальшивое exit сделать return? - person Donal Fellows; 18.11.2015
comment
@DonalFellows: Поскольку OP просто хочет обойти exit, я сделал пустое определение, тем самым лишив его вообще никакого смысла. Возможно, при необходимости можно добавить return. - person Dinesh; 18.11.2015
comment
Телом новой процедуры exit будет return -code return, поэтому она будет вести себя так же, как команда return. - person glenn jackman; 18.11.2015
comment
Прошу прощения за не этот вопрос, но что делает {статус}? Я никогда не видел такого стиля кода... - person user1134991; 19.11.2015
comment
Это аргумент по умолчанию. Статус — это первая полоса аргументов, а испускаемая строка — значение по умолчанию. - person Dinesh; 20.11.2015
comment
@user1134991: посмотрите здесь - person Dinesh; 20.11.2015