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.
- : feval (имя, …)
-
Вычислить функцию с именем имя.
Все аргументы после первого передаются как входные данные в указанную функцию. Например,
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 скрипт
- : run ("скрипт")
-
Выполнить скрипт в текущем рабочем пространстве.
Скрипты, находящиеся в каталогах, указанных в пути загрузки Octave, и заканчивающиеся расширением .m, можно запускать, просто набрав их имя. Для скриптов, не находящихся на пути загрузки, используйте
run.Имя файла скрипт может быть полным, относительным или без расширения. Если расширение не указано, Octave сначала ищет скрипт с расширением .m, а затем возвращается к имени скрипта без расширения.
Примечание по реализации: если скрипт содержит компонент пути, то
runсначала изменяет рабочий каталог на каталог, где находится скрипт. Затем выполняется скрипт. И наконец,runвозвращается в исходный рабочий каталог, *кроме* случаев, когда скрипт изменил каталог.
© 1996–2022 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/v6.4.0/Calling-a-Function-by-its-Name.html