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

© 1996–2026 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.4.0/Script-Files.html

Spec-Zone.ru

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