Spec-Zone.ru › Octave 9

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

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

Spec-Zone.ru

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