copyClosure
Копирует лексическое закрытие процедуры
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
copyClosure(f
)
copyClosure(f)
копирует лексическое закрытие среды процедуры или процедуры f
.
Обычно, когда процедура копируется, например, путем присвоения его идентификатору, лексическое закрытие процедуры не копируется. С помощью скопированной процедуры можно изменить лексическое закрытие исходной процедуры. Таким образом лексическое закрытие процедуры показывает так называемый ссылочный эффект.
copyClosure
может использоваться, чтобы скопировать лексическое закрытие процедуры. Изменения в закрытии копии больше не влияют на закрытие исходной процедуры.
Закрытия реализованы средами процедуры (тип ядра DOM_PROC_ENV
) в MuPAD®. copyClosure
работает путем копирования всей лексически заключающей среды процедуры процедуры.
copyClosure
может также использоваться, чтобы скопировать среду процедуры и все ее лексически заключающие среды только.
Закрытия процедуры показывают ссылочный эффект: процедура f
, сгенерированный gen
, изменяет свое закрытие через переменную i
. “Нормальный” g
копии f
заменяет переменную в том же закрытии, как замечен путем повторного вызова f
по сравнению с g
.
gen:= proc() option escape; local i; begin i := 0; proc() begin i := i+1 end end:
f := gen(): g := f: f(), g(), f(), g()
Если вы теперь генерируете f
снова путем вызова gen
, но копируете g
путем вызова copyClosure
, то g
имеет свое собственное закрытие и теперь более длительные изменения переменная i
в закрытии f
.
f := gen(): g := copyClosure(f): f(), g(), f(), g()
|
Среда процедуры или процедуры, которая будет скопирована |
Скопированная среда процедуры или процедуры