Доступ к аргументам процедуры

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Параметры условий и аргументы часто используются взаимозаменяемо. Строго говоря термин параметры означает имена объектов, которые вы задаете при определении процедуры. Средние значения аргументов термина возражают, что вы используете при вызове процедуры. Эта документация также использует термин формальные параметры для параметров и термина фактические параметры для аргументов.

Много языков программирования требуют, чтобы количество параметров было равно количеству аргументов. MuPAD® не имеет этого требования. Поэтому можно вызвать процедуру с количеством аргументов, отличающихся от количества заданных параметров. Если вы вызываете процедуру с помощью меньшего количества аргументов, чем параметры, система обрабатывает дополнительные параметры как дополнительные локальные переменные без заданных значений. Если вы вызываете процедуру с помощью большего количества аргументов, чем параметры, система не игнорирует эти дополнительные параметры, но позволяет вам получить доступ к ним.

Функция args позволяет вам получить доступ к аргументам текущего вызова процедуры. Вызов args(i), где i является положительным целым числом, возвращает i th аргумент текущего вызова процедуры. Вызов args(0) возвращает общее количество аргументов в текущем вызове процедуры. Например, следующая процедура вычисляет сумму своих аргументов в каждом вызове процедуры:

f := proc() begin
  _plus(args(i) $ i = 1..args(0)):
end_proc:

Процедура работает на любое количество аргументов:

f(), f(100), f(1, 2, 3, 4, 5),
f(a, b, c), f(x $ x = 1..1000)

Кроме того, можно получить доступ к целой последовательности аргументов или любой подпоследовательности той последовательности. Например, следующая процедура распечатывает все аргументы, используемые в текущем вызове. Если текущий вызов использует три или больше аргумента, процедура также распечатывает свои первые три аргумента:

g := proc() begin
print(Unquoted, "all arguments" = args()):
  if args(0) > 2 then
    print(Unquoted, "first three arguments" = args(1..3)):
  else
    print(Unquoted, "not enough arguments"):
  end_if
end_proc:

Вызовите процедуру g с пятью аргументами:

g(10, 20, 30, 40, 50)
all arguments = (10, 20, 30, 40, 50)
first three arguments = (10, 20, 30)

Когда вы передаете аргументы процедуре, MuPAD оценивает эти аргументы. Затем система создает локальную переменную для каждого формального параметра, заданного в определении процедуры. Система присваивает оцененные аргументы этим локальным переменным. Параметры вне процедуры не изменяются. Например, присвойте новое значение формальному параметру в процедуре:

h := proc(a) begin
  a := b;
  print(args()):
end_proc:

Присвоение нового значения к формальному параметру в процедуре не влияет на сам параметр. Это присвоение влияет на результат, возвращенный args. Например, если вы передаете какой-либо аргумент процедуре h, тот аргумент изменения в переменной b в процедуре:

h(100)

Формальный параметр a не изменяет свое значение вне процедуры:

a

Для дальнейших вычислений удалите процедуры f, g и h:

delete f, g, h