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) YYYY Автор".
- ‘mode’
Это значение определяет, должен ли редактор запускаться в асинхронном режиме (редактор запускается в фоновом режиме, и Octave продолжает работу) или в синхронном режиме (Octave ждет, пока редактор завершит работу). Установите его в
"sync", чтобы запустить редактор в синхронном режиме. По умолчанию используется"async"(см. system).- ‘editinplace’
Определяет, должны ли файлы редактироваться на месте, независимо от того, могут ли они быть изменены или нет. По умолчанию
true. Установите вfalse, чтобы файлы функций только для чтения автоматически копировались в ‘home’, если он существует, при их редактировании.- ‘home’
Это значение указывает на директорию, в которую должны копироваться m-файлы системы перед открытием в редакторе. Цель заключается в том, чтобы эта директория также присутствовала в пути, таким образом, отредактированная копия файла функции системы будет скрывать оригинал. Этот параметр действует только при ‘editinplace’ установлен в
false. По умолчанию пустая матрица ([]), что означает, что она не используется. По умолчанию в предыдущих версиях Octave это была ~/octave.
- Если функция name доступна в файле на вашем пути, она будет открыта в редакторе. Если файл не найден, рассматривается вариант m-файла, заканчивающийся
- mfilename ()
- mfilename ("fullpath")
- mfilename ("fullpathext")
Возвращает имя выполняемого в данный момент файла.
Возвращает имя базы выполняемого в данный момент скрипта или функции без расширения. Если вызов происходит вне m-файла, например, из командной строки, возвращается пустая строка.
При аргументе
"fullpath", включает часть имени файла с путем, но без расширения.При аргументе
"fullpathext", включает часть имени файла с путем и расширением.
- 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/v6.4.0/Function-Files.html