Spec-Zone.ru › Octave 7

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, должен быть абсолютным именем файла или именем файла в той же директории, что и функция или скрипт, из которого был вызван автозагрузчик. 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/v7.2.0/Overloading-and-Autoloading.html

Spec-Zone.ru

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