Spec-Zone.ru › Octave 7

11.11 Скриптовые файлы

Скриптовый файл — это файл, содержащий (почти) любую последовательность команд Octave. Он читается и оценивается так, как если бы вы вводили каждую команду в командной строке Octave, и предоставляет удобный способ выполнить последовательность команд, которые логически не принадлежат функции.

В отличие от файла функции, скриптовый файл не должен начинаться с ключевого слова function. Если это произойдёт, Octave будет считать, что это файл функции, и что он определяет одну функцию, которая должна быть вычислена сразу после определения.

Скриптовый файл также отличается от файла функции тем, что переменные, именованные в скриптовом файле, не являются локальными переменными, а находятся в том же пространстве имён, что и другие переменные, видимые в командной строке.

Несмотря на то, что скриптовый файл может не начинаться с ключевого слова function, в одном скриптовом файле можно определить более одной функции и загрузить (но не выполнить) все их сразу. Для этого первый токен в файле (игнорируя комментарии и другие пробелы) должен быть чем-то иным, чем function. Если у вас нет других утверждений для оценки, вы можете использовать утверждение, которое не оказывает никакого влияния, например:

# Prevent Octave from thinking that this
# is a function file:

1;

# Define function one:

function one ()
  …

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

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

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

# not a function file:
1;
function foo ()
  do_something ();
endfunction
function do_something ()
  do_something_else ();
endfunction

даже если функция do_something не определена до того, как она упоминается в функции foo. Это не ошибка, потому что Octave не нуждается в разрешении всех символов, на которые ссылается функция, до фактического вычисления функции.

Поскольку Octave не ищет определения, пока они не понадобятся, следующий код всегда выведет «bar = 3», независимо от того, введён ли он непосредственно в командной строке, считан из скриптового файла или является частью тела функции, даже если в пути Octave есть файл или скрипт с именем bar.m.

eval ("bar = 3");
bar

Код такого типа, появляющийся внутри тела функции, мог бы ввести Octave в заблуждение, если бы определения разрешались по мере компиляции функции. Практически невозможно сделать Octave достаточно умным, чтобы вычислить этот код последовательно. Парсеру пришлось бы выполнить вызов eval во время компиляции, и это было бы невозможно, если все ссылки в строке для оценки также не были бы разрешены. Требование этого было бы слишком ограничительным (строка могла бы поступать от пользователя или зависеть от чего-то, что неизвестно до оценки функции).

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

: source (file) ¶
: source (file, context) ¶

Обработать и выполнить содержимое файла file.

Без указания context, это эквивалентно выполнению команд из скриптового файла, но без необходимости именования файла file.m или размещения его в пути выполнения.

Вместо текущего контекста скрипт может быть выполнен в контексте функции, которая вызвала текущую функцию ("caller"), или в верхнем контексте ("base").

См. также: run.

  • Опубликовать скриптовые файлы Octave
  • Публикация разметки
  • Jupyter Notebooks

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

Spec-Zone.ru

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