Spec-Zone.ru › Octave 9

Следующее: Файлы скриптов, Предыдущее: Проверка аргументов, Вверх: Функции и скрипты [Оглавление][Индекс]

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

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

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

Когда Octave сталкивается с неопределённым идентификатором, оно сначала ищет переменные или функции, которые уже скомпилированы и перечислены в его таблице символов. Если определение не найдено, оно ищет в списке каталогов (путь) файлы с расширением .m, имеющие такое же имя, как и неопределённый идентификатор.5 После того, как 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’

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

‘"текст"’

Ваш собственный авторский знак и лицензия.

Если не указано ‘pd’, edit добавит к авторскому праву заявление "Авторское право (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–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/Function-Files.html

Spec-Zone.ru

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