Spec-Zone.ru › Octave 5

11.9.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/v5.2.0/Overloading-and-Autoloading.html

Spec-Zone.ru

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