11.10 Скриптовые файлы
Скриптовый файл — это файл, содержащий (почти) любую последовательность команд 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/v5.2.0/Script-Files.html