Pref
:: warnDeadProcEnv
Предупреждения о неправильном использовании лексического контекста
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Pref::warnDeadProcEnv(TRUE) Pref::warnDeadProcEnv(FALSE) Pref::warnDeadProcEnv(NIL) Pref::warnDeadProcEnv()
Pref::warnDeadProcEnv()
возвращает текущую установку.
Pref::warnDeadProcEnv(TRUE)
включает предупреждения о недостижимых средах процедуры.
Pref::warnDeadProcEnv(FALSE)
выключает предупреждающие сообщения.
Pref::warnDeadProcEnv(NIL)
сбросит значение по умолчанию, которое является FALSE
.
Если процедура выполняется, среда процедуры создается для этой процедуры. Это содержит текущие значения формальных параметров и локальных переменных. На выходе процедуры эта среда процедуры больше обычно не нужна и уничтоженная.
Если процедура возвращает локальную процедуру как свой результат, эта локальная процедура выходит из своего осциллографа. Обычно это не проблема. Только если процедура выхода содержит ссылки на формальные параметры или локальные переменные внешней процедуры, эти переменные выходят из своего осциллографа. Эти переменные не могут быть разыменованы, поскольку они ссылаются на значения среды процедуры внешней процедуры, которая больше не существует.
Используйте Escape опции во внешней процедуре в порядке сохранить его среду процедуры нетронутой.
Позволяет или подавляет предупреждающие сообщения.
Здесь мы пишем процедуре p
, который возвращает локальную процедуру. Возвращенная процедура добавляет значение своего аргумента y
к значению аргумента x
первой процедуры. Следующая наивная реализация производит странный вывод и, когда получившаяся процедура называется, предупреждающее сообщение и ошибка:
Pref::warnDeadProcEnv(FALSE): p := proc(x) begin y -> x + y end: f := p(1); f(2)
Warning: Uninitialized variable 'unknown' used. Evaluating: f
Error: Illegal operand. [_plus] Evaluating: f
Если Pref::warnDeadProcEnv
будет установлен в TRUE
MuPAD®, то распечатает предупреждающее сообщение, когда локальная процедура выходит из своего осциллографа:
Pref::warnDeadProcEnv(TRUE): p := proc(x) begin y -> x + y end: f := p(1)
Warning: Found dead closure of procedure 'p'.
Используйте Escape опции во внешней процедуре, чтобы предотвратить это предупреждение. Возвращенная процедура f
будет затем работать как ожидалось:
p := proc(x) option escape; begin y -> x + y end: f := p(1); f(2)
Ранее установите значение