11.10.5 Перегрузка и автозагрузка
Функции можно перегружать для работы с различными входными аргументами. Например, оператор ’+’ в Octave перегружен для работы с аргументами типов single, double, uint8, int32 и многих других. Предпочтительный способ перегрузки функций — использование классов и объектно-ориентированного программирования (см. раздел Перегрузка функций). Однако иногда требуется отменить пользовательскую перегрузку и вызвать функцию по умолчанию, связанную с определённым типом. Для этой цели существует функция builtin.
-
:
[…] =builtin(f, …) -
Вызвать базовую функцию f, даже если для заданной сигнатуры типов f перегружена другой функцией.
Обычно это полезно при объектно-ориентированном программировании, когда требуется вызвать одну из базовых функций Octave, а не её перегруженную версию из нового класса.
Простой пример, в котором функция
sinпереопределяется как функцияcos, показывает, как работаетbuiltin.sin (0) ⇒ 0 function y = sin (x), y = cos (x); endfunction sin (0) ⇒ 1 builtin ("sin", 0) ⇒ 0
Один динамически подключаемый файл может определять несколько функций. Однако Octave выполняет поиск функций по имени файла, поэтому Octave должен каким-либо образом находить каждую функцию в динамически подключаемом файле. В операционных системах, поддерживающих символические ссылки, для каждой содержащейся в файле функции можно создать символическую ссылку на исходный файл.
Однако есть по крайней мере одна широко известная операционная система, не поддерживающая символические ссылки. Создавать копии исходного файла для каждой функции нежелательно, поскольку это увеличивает объём дискового пространства, занимаемого Octave. Вместо этого в Octave предусмотрена функция autoload, которая позволяет пользователю указать, в каком файле следует искать определённую функцию.
-
:
autoload_map =autoload() -
: autoload
(function, file) -
: autoload
(…, "remove") -
Задать автозагрузку function из файла file.
Второй аргумент, file, должен содержать абсолютное имя файла или имя файла в том же каталоге, что и функция или сценарий, из которого была вызвана команда autoload. file не должен зависеть от пути поиска Octave.
Обычно вызовы
autoloadпомещают в файлы сценариев PKG_ADD, которые выполняются при добавлении каталога в путь поиска Octave. Чтобы не указывать имена каталогов в file непосредственно, если file находится в том же каталоге, что и сценарий PKG_ADD,autoload ("foo", "bar.oct");загрузит функцию
fooиз файлаbar.oct. Приведённый выше вариант использования, еслиbar.octнаходится не в том же каталоге, а также такие варианты, какautoload ("foo", file_in_loadpath ("bar.oct"))настоятельно не рекомендуются, поскольку их поведение может быть непредсказуемым.
Если аргументы не указаны, возвращает структуру с текущей картой автозагрузки.
Если указан третий аргумент
"remove", функция очищается и больше не загружается в течение текущего сеанса Octave.См. также: PKG_ADD.
© 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/Overloading-and-Autoloading.html