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")¶ -
Определить функцию для автозагрузки из файла.
Второй аргумент, файл, должен быть абсолютным именем файла или именем файла в той же директории, что и функция или скрипт, из которого был вызван автозагрузка. Файл не должен зависеть от пути загрузки Octave.
Обычно вызовы
autoloadпоявляются в скриптах PKG_ADD, которые выполняются при добавлении директории в путь загрузки Octave. Чтобы избежать необходимости вписывать имена директорий в файл, если файл находится в той же директории, что и скрипт PKG_ADD, тоautoload ("foo", "bar.oct");будет загружать функцию
fooиз файлаbar.oct. Вышеупомянутое использование, когдаbar.octне находится в той же директории, или использования, такие какautoload ("foo", file_in_loadpath ("bar.oct"))настоятельно не рекомендуется, так как их поведение может быть непредсказуемым.
Без аргументов возвращает структуру, содержащую текущую карту автозагрузки.
Если задан третий аргумент
"remove", функция очищается и больше не загружается в течение текущего сеанса Octave.См. также: PKG_ADD.
© 1996–2023 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.2.0/Overloading-and-Autoloading.html