Spec-Zone.ru › Octave 6

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
• Опубликование разметки

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

Spec-Zone.ru

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