contextОцените объект в контексте включения
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
context(object)
В рамках процедуры, context(object) оценивает object в контексте процедуры вызова.
Процедуры Most MuPAD® оценивают свои аргументы прежде, чем выполнить тело процедуры. Однако, если процедура объявляется с опцией hold, затем аргументы передаются неоцененной процедуре. context подачи, чтобы оценить такие аргументы по опыту из процедуры.
Как большинство процедур MuPAD, context сначала оценивает его аргумент object как обычно, в контексте текущей процедуры. Затем результат оценен снова в динамическом контексте, который был допустим, прежде чем текущая процедура была названа. Контекст включения является или интерактивным уровнем или процедурой который названный текущей процедурой.
"func_call"- методы областей никогда не оценивают свои аргументы, ли опция hold используется или нет. Смотрите Пример 2.
context чувствительно к значению переменной окружения LEVEL, который определяет максимальную глубину рекурсивного процесса, который заменяет идентификатор его значением во время оценки. Оценка аргумента происходит со значением LEVEL это допустимо в текущей процедуре, которая является 1 по умолчанию. Вторая оценка использует значение LEVEL это допустимо в контексте включения, который обычно является 1 если контекст включения является также процедурой, в то время как это - 100 по умолчанию, если контекст включения является интерактивным уровнем. Смотрите Пример 3.
Функциональный context не должен быть назван на интерактивном уровне и context вызовы не должны быть вложены. Таким образом не возможно оценить объект в более высоких уровнях динамического стека вызовов. Смотрите Пример 4.
context чувствительно к значению переменной окружения LEVEL, который определяет максимальную глубину замены для идентификаторов.
Мы задаем процедуру f с опцией hold. Если эта процедура вызвана идентификатором в качестве аргумента, такого как a ниже, identifier самостоятельно действительный аргумент в f. context может использоваться, чтобы получить значение a во внешнем контексте:
a := 2:
f := proc(i)
option hold;
begin
print(i, context(i), i^2 + 2, context(i^2 + 2));
end_proc:
f(a):![]()
Если процедура с опцией hold называется из другой процедуры, вы будете видеть странные эффекты если процедура с опцией hold не оценивает его формальные параметры с context. Здесь, значение формального параметра j в g variable i который задан в контексте процедуры f и не его значение 4. Когда необходимо получить доступ к значению этой переменной необходимо использовать context, в противном случае вы видите выход DOM_VAR(0,2) который является переменной i 'off' который потерял его осциллограф:
f := proc()
local i;
begin
i := 4:
g(i);
end_proc:
g := proc(j)
option hold;
begin
print(j, eval(j), context(j));
print(j + 1)
end_proc:
f()![]()
![]()
"func_call" метод области неявно объявляется с option hold. Мы задаем "func_call" метод для доменного DOM_STRING из строк MuPAD. Стандартная программа паза преобразует свои остающиеся аргументы в строки и добавляет их к первому аргументу, который совпадает со строкой, которая является 0th операндом вызова функции:
unprotect(DOM_STRING): DOM_STRING::func_call := string -> _concat(string, map(args(2..args(0)), expr2text)): a := 1: "abc"(1, a, x)
![]()
Вы видите что идентификатор a был добавлен к строке, и не ее значению 1. Используйте context получить доступ к значению что a имеет перед "func_call" метод вызывается:
DOM_STRING::func_call :=
string -> _concat(string, map(context(args(2..args(0))),
expr2text)):
"abc"(1, a, x);
delete DOM_STRING::func_call: protect(DOM_STRING, Error):![]()
Этот пример показывает влияние переменной окружения LEVEL на оценке context и различия для функций eval и levelP функция с опцией holdX формальный параметр этой процедуры. При оценке их аргументов contexteval и level вся замена x сначала его значением a. Затем eval оценивает a в текущем контексте с LEVEL = 1 и дает к значению b. context оценивает a в контексте включения (который является интерактивным уровнем) с LEVEL = 100 и урожаи c. level всегда возвращает результат первого шага оценки, который является a.
Когда LEVEL из интерактивного уровня 1, context возвращает b как eval поскольку вторая оценка выполняется с LEVEL = 1 как в eval.
Локальная переменная b из p не влияет на оценку в contexteval и level поскольку это - только локально заявленная переменная типа DOM_VAR который не имеет никакого отношения к идентификатору b, который является значением a:
delete a, b, c: a := b: b := c:
p := proc(x)
option hold;
local b;
begin
b := 2;
eval(x), context(x), level(x), level(x,2);
end:
p(a);
LEVEL := 1: p(a);
delete LEVEL:![]()
![]()
Функциональный context не должен быть назван на интерактивном уровне:
context(x)
Error: Function call not supported on interactive level. [context]
Error: Function call not allowed on interactive level. [context]
|
Любой объект MuPAD |
Объект Evaluated.