Spec-Zone.ru › Octave 9

9.1 Вызов функции по её имени

Функция feval позволяет вызвать функцию из строки, содержащей её имя. Это полезно при написании функции, которой нужно вызывать функции, предоставленные пользователем. Функция feval принимает имя вызываемой функции в качестве первого аргумента, а остальные аргументы передаются этой функции.

В следующем примере показана простая функция, использующая feval для нахождения корня пользовательской функции одной переменной методом Ньютона.

function result = newtroot (fname, x)

# usage: newtroot (fname, x)
#
#   fname : a string naming a function f(x).
#   x     : initial guess

  delta = tol = sqrt (eps);
  maxit = 200;
  fx = feval (fname, x);
  for i = 1:maxit
    if (abs (fx) < tol)
      result = x;
      return;
    else
      fx_new = feval (fname, x + delta);
      deriv = (fx_new - fx) / delta;
      x = x - fx / deriv;
      fx = fx_new;
    endif
  endfor

  result = x;

endfunction

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

: retval = feval (name, …)

Выполнить функцию с именем name.

Все аргументы после первого передаются именованной функции в качестве входных данных. Например,

feval ("acos", -1)
     ⇒ 3.1416

вызывает функцию acos с аргументом «-1».

Функцию feval также можно использовать с дескрипторами функций любого вида (см. Дескрипторы функций). Исторически feval была единственным способом вызова пользовательских функций, заданных строками, однако теперь предпочтительнее использовать дескрипторы функций благодаря более ясному синтаксису. Например,

f = @exp;
feval (f, 1)
    ⇒ 2.7183
f (1)
    ⇒ 2.7183

являются эквивалентными способами вызова функции, на которую ссылается f. Если заранее невозможно определить, является ли f дескриптором функции, именем функции в строке или встроенной функцией, вместо этого можно использовать feval.

Для вызова пользовательских файлов сценариев, которые не обязательно находятся в пути поиска пользователя, существует аналогичная функция run.

: run script
: run ("script")

Выполнить script в текущем рабочем пространстве.

Сценарии, расположенные в каталогах, указанных в пути загрузки Octave, и имеющие расширение .m, можно запустить, просто введя их имя. Для сценариев, расположенных вне пути загрузки, используйте run.

Имя файла script может быть простым, полным или относительным именем файла, с расширением или без него. Если расширение не указано, Octave сначала выполнит поиск сценария с расширением .m, а затем, если он не найден, — сценария с именем без расширения.

Примечание по реализации: если script содержит компонент пути, run сначала меняет текущий рабочий каталог на каталог, в котором находится script. Затем выполняется сценарий. Наконец, run возвращается в исходный рабочий каталог, если только script явно не сменил каталог.

См. также: path, addpath, source.

© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Calling-a-Function-by-its-Name.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API