Spec-Zone.ru › Octave 7

11.10 Файлы функций

За исключением простых одноразовых программ, непрактично определять все необходимые функции каждый раз, когда они нужны. Вместо этого вы обычно захотите сохранить их в файле, чтобы можно было легко редактировать их и сохранить для использования в дальнейшем.

Octave не требует загрузки определений функций из файлов перед их использованием. Вам просто нужно поместить определения функций в место, где Octave сможет их найти.

Когда Octave сталкивается с идентификатором, который не определен, он сначала ищет переменные или функции, которые уже скомпилированы и в настоящее время находятся в его таблице символов. Если он не найдет определения там, он ищет в списке директорий (путь) файлы с расширением .m, которые имеют то же базовое имя, что и неопределенный идентификатор.5 Как только Octave найдет файл с соответствующим именем, содержимое файла считывается. Если в файле определена одна функция, она компилируется и выполняется. Смотрите Файлы скриптов для получения дополнительной информации о том, как определить более одной функции в одном файле.

Когда Octave определяет функцию из файла функций, она сохраняет полное имя файла, который она прочитала, и метку времени файла. Если метка времени файла изменяется, Octave может перезагрузить файл. Когда Octave работает интерактивно, проверка меток времени обычно происходит не более одного раза при каждом отображении подсказки Octave. Поиск новых определений функций также происходит, если текущая рабочая директория изменяется.

Проверка метки времени позволяет редактировать определение функции во время работы Octave и автоматически использовать новое определение функции без необходимости перезапуска сессии Octave.

Чтобы избежать ненужного снижения производительности, проверяя метки времени функций, которые вряд ли изменятся, Octave предполагает, что файлы функций в дереве директорий octave-home/share/octave/version/m не изменятся, поэтому не нужно проверять их метки времени каждый раз, когда используются функции, определенные в этих файлах. Это обычно очень хорошее предположение и обеспечивает значительное улучшение производительности для файлов функций, распространяемых с Octave.

Если вы знаете, что ваши собственные файлы функций не будут изменяться во время работы Octave, вы можете повысить производительность, вызвав ignore_function_time_stamp ("all"), чтобы Octave игнорировал метки времени всех файлов функций. Передача "system" в эту функцию сбросит поведение по умолчанию.

: edit name ¶
: edit field value ¶
: value = edit ("get", field) ¶
: value = edit ("get", "all") ¶

Редактирование именованной функции или изменение настроек редактора.

Если edit вызывается с именем файла или функции в качестве аргумента, оно будет открыто в текстовом редакторе, определенном EDITOR.

  • Если функция name доступна в файле по вашему пути, она будет открыта в редакторе. Если файл не найден, будет рассмотрен вариант m-файла с расширением ".m". Если файл все еще не найден, будут рассмотрены варианты с префиксом "@" и затем с префиксом "@" и суффиксом ".m".
  • Если name — имя функции командной строки, будет создан m-файл, содержащий эту функцию вместе с ее текущим определением.
  • Если указано name.cc, будет произведен поиск name.cc по пути и открыт в редакторе. Если файл не найден, будет создан новый файл .cc. Если name является m-файлом или функцией командной строки, текст этой функции будет вставлен в файл .cc в качестве комментария.
  • Если name.ext находится на вашем пути, он будет отредактирован; в противном случае редактор будет запущен с name.ext в текущей директории в качестве имени файла.

    Предупреждение: Возможно, вам потребуется очистить name перед тем, как новое определение станет доступным. Если вы редактируете файл .cc, вам необходимо выполнить mkoctfile name.cc перед тем, как определение станет доступным.

Если edit вызывается с переменными field и value, значение поля управления field будет установлено в value.

Если запрашивается выходной аргумент и первый входной аргумент — get, то edit вернёт значение поля управления field. Если поле управления не существует, edit вернёт структуру, содержащую все поля и значения. Таким образом, edit ("get", "all") возвращает полную структуру управления.

Ниже приведены используемые поля управления:

‘author’

Это имя, которое следует поместить после поля "## Автор:" новых функций. По умолчанию оно угадывается из поля gecos базы данных паролей.

‘email’

Это электронный адрес, который следует перечислить после имени в поле "Автор". По умолчанию он угадывается из <$LOGNAME@$HOSTNAME>, а если $HOSTNAME не определено, используется uname -n. Вероятно, вам нужно будет переопределить это. Убедитесь, что используется формат user@host.

‘license’
‘gpl’

GNU Общая публичная лицензия (по умолчанию).

‘bsd’

Лицензия в стиле BSD без условия об объявлении.

‘pd’

Общественное достояние.

‘"text"’

Ваши собственные стандартные текст авторских прав и лицензии.

Если не указано ‘pd’, edit добавит к заявлению об авторских правах "Copyright (C) ГГГГ Автор".

‘mode’

Это значение определяет, должен ли редактор запускаться в асинхронном режиме (редактор запускается в фоновом режиме, и Octave продолжает работу) или в синхронном режиме (Octave ожидает завершения работы редактора). Установите его в "sync", чтобы запустить редактор в синхронном режиме. По умолчанию используется "async" (см. system).

‘editinplace’

Определяет, должны ли файлы редактироваться на месте, независимо от того, изменяемы ли они или нет. По умолчанию true. Установите его в false, чтобы файлы функций только для чтения автоматически копировались в ‘home’, если он существует, при редактировании.

‘home’

Это значение указывает на директорию, в которую должны копироваться системные m-файлы перед открытием их в редакторе. Цель состоит в том, чтобы эта директория также находилась на пути, чтобы отредактированная копия системного файла функции затеняла оригинальную. Это настройка имеет эффект только тогда, когда ‘editinplace’ установлено в false. По умолчанию пустая матрица ([]), что означает, что она не используется. По умолчанию в предыдущих версиях Octave был ~/octave.

См. также: EDITOR, path.

: mfilename () ¶
: mfilename ("fullpath") ¶
: mfilename ("fullpathext") ¶

Возвращает имя текущего исполняемого файла.

Возвращает базовое имя текущего выполняемого скрипта или функции без расширения. Если вызывается извне m-файла, например, из командной строки, возвращает пустую строку.

При аргументе "fullpath", включает в себя часть имени файла с каталогом, но без расширения.

При аргументе "fullpathext", включает в себя часть имени файла с каталогом и расширением.

См. также: inputname, dbstack.

: val = ignore_function_time_stamp () ¶
: old_val = ignore_function_time_stamp (new_val) ¶

Запрос или установка внутренней переменной, которая управляет тем, проверяет ли Octave метку времени файлов каждый раз, когда ищет функции, определенные в файлах функций.

Если внутренняя переменная установлена в "system", Octave не будет автоматически перекомпилировать файлы функций в поддиректориях octave-home/share/version/m, если они изменились с момента последней компиляции, но будет перекомпилировать другие файлы функций в пути поиска, если они изменятся.

Если установлено в "all", Octave не будет перекомпилировать какие-либо файлы функций, если их определения не удалены с помощью clear.

Если установлено в "none", Octave всегда будет проверять метки времени файлов, чтобы определить, нужно ли перекомпилировать функции, определенные в файлах функций.

  • Изменение пути загрузки
  • Вложенные функции
  • Приватные функции
  • Вложенные функции
  • Перегрузка и автозагрузка
  • Блокировка функций
  • Приоритет функций

Примечания

(5)

Суффикс ‘.m’ был выбран для совместимости с MATLAB.

© 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/Function-Files.html

Spec-Zone.ru

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