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, который определяет максимальную глубину замены для идентификаторов.

Примеры

Пример 1

Мы задаем процедуру 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 является i variable, который задан в контексте процедуры f и не его значение 4. Когда необходимо получить доступ к значению этой переменной необходимо использовать context, в противном случае вы видите вывод DOM_VAR(0,2), который является переменной i f, который потерял его осциллограф:

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()

Пример 2

Метод "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):

Пример 3

Этот пример показывает влияние переменной окружения LEVEL на оценке context и различий для функций eval и level. p является функцией с опцией hold. x является формальным параметром этой процедуры. При оценке их аргументов context, eval и 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 не влияет на оценку в context, eval и 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:

Пример 4

Функциональный context не должен быть назван на интерактивном уровне:

context(x)
Error: Function call not supported on interactive level. [context]
 Error: Function call not
allowed on interactive level. [context] 

Параметры

object

Любой объект MuPAD

Возвращаемые значения

Объект Evaluated.

Смотрите также

Области MuPAD

Функции MuPAD