Spec-Zone.ru › Octave 9

Next: Блокировка функций, Previous: Вложенные функции, Up: Файлы функций [Содержание][Индекс]

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.

Next: Блокировка функций, Previous: Вложенные функции, Up: Файлы функций [Содержание][Индекс]

© 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

Spec-Zone.ru

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