11.10.5 Перегрузка и автозагрузка
Функции могут быть перегружены для работы с различными входными аргументами. Например, оператор ’+’ перегружен в Octave для работы с одинарными, двойными, 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–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/Overloading-and-Autoloading.html